Я новичок в программировании, и я взял это как хобби. Поэтому я начал решать упражнение, но моя программа неожиданно аварийно.
Это упражнение:Сбой программы?
Чувствительный Общество Клуб организует пожертвование кампании. Чтобы больше развлечься в кампании, они организуют конкурс среди департаментов. В конкурсе победители пожертвования студенты и отдел награждаются сертификатом.
Вопрос: Напишите программу, которая читает информацию для русских студентов, тогда она показывает имя студента, который пожертвовал большую сумму, и отдел, средний уровень которого является самым высоким.
Ввод спецификации: Вам будет дано целое число (n) в начале. Тогда следующие п строки будут иметь три информации:
Student Имя: имена не более 20 знаков строки, содержащие только 26 букв английского языка (верхний или нижний регистр) его/ее отдел: не более 4 символов длинной строки (только 3 отделения в конкурсе: ЕКС, ЕЭК или BINF)
Выход спецификация: Показать две строки:
на имя студента, который пожертвовал самым,
отдел, средний самый высокий.
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
Так я знаю, что это немного плохо сделано, но вот проблема.
Ввод первой и второй строк входов Johnny CEN 500
Mark BINF 600
и после этого программа вылетает.
Любые мысли о том, почему это происходит? Примечание. Я бы не хотел использовать массивы в это время, поскольку я изучаю основы и постоянно перехожу к более сложным вещам.
Просьба указать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Ваш код не может быть скомпилирован как есть, так что людям будет намного сложнее помочь вам. –
'department [4]'. Строки в C содержат терминатор NUL. Так что «BINF» требует 5 «символов» в массиве для хранения. – kaylum
И никогда не используйте 'gets'. Он даже говорит вам, что на странице [получает справочную страницу] (https://linux.die.net/man/3/gets). – kaylum