私はプログラミングでは新しく、これを趣味として取り上げました。だから私は運動を解決し始めたが、私のプログラムは突然クラッシュする。プログラムがクラッシュしますか?
敏感な社会クラブが寄付キャンペーンを開催:
これは運動です。キャンペーンをもっと楽しくするために、彼らは部門間の競争を組織します。競技会では、寄付先の学生と部門に証明書が与えられます。質問: n人の生徒の情報を読み取るプログラムを作成すると、最も多く寄付した学生の名前と平均が最も高い部署が表示されます。
入力の指定:最初に1つの整数(n)が与えられます。すると、次のn行は、3件の情報があります:
学生名:最大で4文字の長い文字列(のみ:名は、わずか26英語(大文字または小文字)の文字彼/彼女の部門を含む最大20文字の文字列です競争の中で3つの部門:CEN、ECEまたはBINF)
出力仕様は:
最も寄贈し、学生の名前、
、平均最高である部門:2つの文字列を表示します。
int n,i,CENc=0,ECEc=0,BINFc=0,CENa=0,ECEa=0,BINFa=0,amountS,amountH=0,avgCEN,avgECE,avgBINF;
char department[4],name[20],nameH[20];
scanf ("%d",&n);
for (i=0;i<n;i++);{
gets (name);
gets (department);
scanf("%d",&amountS);
if (strcmp(department,"ECE")==0){
ECEa=ECEa+amountS;
ECEc++;
}
else if (strcmp(department,"CEN")==0){
CENa=CENa+amountS;
CENc++;
}
else if (strcmp(department,"BINF")==0){
BINFa=BINFa+amountS;
BINFc++;
}
if (amountS>amountH){
amountH=amountS;
strcpy(nameH,name);
}
}
avgCEN=CENa/CENc;
avgECE=ECEa/ECEc;
avgBINF=BINFa/BINFc;
if (avgCEN>avgECE && avgCEN>avgBINF){
printf("%d", avgCEN);
printf("%s", nameH);
}
else if (avgECE>avgCEN && avgECE>avgBINF){
printf("%d", avgECE);
printf("%s", nameH);
}
else if (avgBINF>avgCEN && avgBINF>avgECE){
printf("%d", avgBINF);
printf("%s", nameH);
}
return 0
ので、私はそれがひどく行われますが、ここで問題なのはほとんど知っています。
入力の1行目と2行目にJohnny CEN 500
Mark BINF 600
と入力し、その後にプログラムがクラッシュします。
それはなぜ起こるかについての考えはありますか?注:私は基本を学び、より複雑なものに時間をかけて進んでいるので、現在は配列を使用したくないです。
[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を入力してください。あなたのコードをそのままコンパイルすることはできません。だから、人々があなたを助けることはずっと難しくなります。 –
'department [4]'です。 Cの文字列にはNULターミネータが含まれています。したがって、 "BINF"は配列に5つの 'chars'を格納する必要があります。 – kaylum
そして 'gets'を使用しないでください。それは、[マニュアルページを手に入れる](https://linux.die.net/man/3/gets)にあることを伝えます。 – kaylum