前提・実現したいこと
C言語で名前と数字を入力していき1番小さい数字と2番目に小さい数字の人の名前を表示させるプログラムを作りたいです。
発生している問題・エラーメッセージ
現在名前と数字を入力することができるのですが2人目の名前と数字を入力した後にIllegal instructionというようなエラーが出てきてしまいます。
Illegal instructionについて調べてみたのですが情報が少なくあまりわからなかったのでIllegal instructionについても説明していただけるとありがたいです。
エラーメッセージ Illegal instruction
ソースコードです。
#include <stdio.h> #include <string.h> int main (void) { int i; char name[1000]; int number[1000]; char min_name_1[1000]; int min_number_1[1000]; char min_name_2[1000]; int min_number_2[1000]; char ans_name_1; char ans_name_2; for(i = 0; i < 1000; i++) { if((scanf("%s",&name[i])) == EOF) break; scanf("%d", &number[i]); if(i == 0) { min_name_1[i] = name[i]; min_number_1[i] = number[i]; min_name_2[i] = name[i]; min_number_2[i] = number[i]; } else { if(number[i] < min_number_1[i]) { min_name_2[i] = min_name_1[i]; min_number_2[i] = min_number_1[i]; min_name_1[i] = name[i]; min_number_1[i] = number[i]; strcpy(&ans_name_1,&min_name_1[i]); strcpy(&ans_name_2,&min_name_2[i]); } } } printf("%c\n",ans_name_1); printf("%c\n",ans_name_2); return 0; }
min_name_1[i] = name[i];って何をしているんでしょう?・・・ほかも・・・
文字列のコピーはstrcpy()を使いましょう。→http://www.c-tipsref.com/reference/string/strcpy.html
別の質問でこの問題見た覚えが……どこの課題なんだろう。
それはともかく、「1000人分の名前を覚えられるようにした」つもりなんだろうけど、実際には「最大1000文字分の名前ひとつしか覚える場所を作ってない」ように見えます。
既視感の原因はこれですね
https://teratail.com/questions/265979
私の既視感はこっちでした
https://teratail.com/questions/268235
最大1000文字分の名前ひとつしか覚える場所を作ってないとありますがどのように書けば1000人分の名前を覚えられるようにできるのですか、、?