Ошибка при выводе сведений о студентах - C (СИ)
Формулировка задачи:
Народ помогите найти ошибку. Не могу найти.
При проверке программа сбивается на среднем бале а дпльше вообще не работает. Не могу понять где я ошибся. Помогите нати ошибку. Заранее спасибо.
#include<stdio.h>
void main()
{char fio[20][20];
char nomsh[20][20];
char klass[20][20];
char srball[20][20];
int lubpredm[20];
int nelubpredm[20];
int i,n;
printf("Введите число учеников (не больше 20): ");
scanf("%d", &n);
i=0;
while(i<n)
{printf("Ученик %d\n", i+1);
printf("ФИО: ");
scanf("%20s", fio[i]);
i++;
}
i=0;
do
{printf("Ученик %d\n", i+1);
printf("Номер школы: ");
scanf("%20s", nomsh[i]);
i++;
} while(i<n);
for(i=0;;i++)
{printf("Ученик %d\n", i+1);
if(i>=n) break;
printf("Класс: ");
scanf("%20s", klass[i]);
}
for(i=0;;i++)
{printf("Ученик %d\n", i+1);
if(i>=n) goto l;
printf("Средний балл аттестата: ");
scanf("%20s", srball[i]);
}
l:
for(i=0;i<n;i++)
{printf("Ученик %d\n", i+1);
printf("Любимый предмет: ");
scanf("%d", lubpredm[i]);
}
for(i=0;i<n;i++)
{printf("Ученик %d\n", i+1);
printf("Нелюбимый предмет: ");
scanf("%d", nelubpredm[i]);
}
printf("-------------------------\n");
for(i=0;i<n;i++)
{printf(" Ученик %d\n", i+1);
printf("ФИО: ");
printf("%s\n", fio[i]);
printf("Номер школы: ");
printf("%s\n", nomsh[i]);
printf("Класс: ");
printf("%s\n", klass[i]);
printf("Средний балл аттестата: ");
printf("%s\n", srball[i]);
printf("Любимый предмет: ");
printf("%d\n", lubpredm[i]);
printf("Нелюбимый предмет: ");
printf("%d\n", nelubpredm[i]);
}
}Решение задачи: «Ошибка при выводе сведений о студентах»
textual
Листинг программы
/****************************************************************************
* *
* File : main.c *
* *
* Purpose : Console mode (command line) program. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
/****************************************************************************
* *
* Function: main *
* *
* Purpose : Main entry point. *
* *
* History : Date Reason *
* 00/00/00 Created *
* *
****************************************************************************/
int main(int argc, char *argv[])
{
typedef struct{
char fio[46];
char spe[3];
unsigned nog:3;
unsigned dd:5,mm:4,yy:14;
}STYDENT;
int n=0,g;
for(;;){
printf("Wrine number of students:\n");
scanf("%d",&n);
if(n<2)printf("It's too little!!!Try again!)\n\n");
else break;
}
STYDENT list[n];
for(int i=0;i<n;i++){
char str[100],fio[3][16];
unsigned date[3], nog;
printf("Wrine information about student number %d:\n",i+1);
fflush(stdin);gets(str);
if(8 != sscanf(str,"%s %s %s [%s %u], %u.%u.%u"\
,fio[0],fio[1],fio[2],list[i].spe,&nog,&date[0],&date[1],&date[2])){
puts("Incorrect input! Try again!)");
i--;
continue;
}
strcpy(list[i].fio,"");
for(int j=0;j<3;j++){
strcat(list[i].fio,fio[j]);
strcat(list[i].fio," ");
}
if(strlen(list[i].spe)!=2){
puts("Incorrect kurs! Try again!)");
i--;
continue;
}
if((nog<1)||(nog>5)){
puts("Incorrect kurs! Try again!)");
i--;
continue;
}
if((date[2]<1900)||(date[2]>2000)){
puts("Incorrect year! Try again!)");
i--;
continue;
}
if(date[2]%4==0)g=1;else g=0;
if(((date[1]==1)||(date[1]==3)||(date[1]==5)\
||(date[1]==7)||(date[1]==8)||(date[1]==10)\
||(date[1]==12))&&((date[0]<1)||(date[0]>31))){
puts("Incorrect date! Try again!)");
i--;
continue;
}else if(((date[1]==4)||(date[1]==6)||(date[1]==9)\
||(date[1]==10))&&((date[0]<1)||(date[0]>30))){
puts("Incorrect date! Try again!)");
i--;
continue;
}else if((date[1]==2)&&(g==1)&&((date[0]<1)||(date[0]>28))){
puts("Incorrect date! Try again!)");
i--;
continue;
}else if((date[1]==2)&&(g==0)&&((date[0]<1)||(date[0]>27))){
puts("Incorrect date! Try again!)");
i--;
continue;
}else if((date[1]<1)||(date[1]>12)){
puts("Incorrect mounth! Try again!)");
i--;
continue;
}
list[i].nog = nog;
list[i].dd=date[0];
list[i].mm=date[1];
list[i].yy=date[2];
}
int flag=1;
while(flag){
flag=0;
for(unsigned f=0;f<n-1;f++){\
if((strcmp(list[f].spe,list[f+1].spe)>0)\
||((strcmp(list[f].spe,list[f+1].spe)==0)\
&&(list[f].yy>list[f+1].yy))\
||((strcmp(list[f].spe,list[f+1].spe)==0)\
&&(list[f].yy==list[f+1].yy)\
&&(list[f].mm>list[f+1].mm))\
||((strcmp(list[f].spe,list[f+1].spe)==0)\
&&(list[f].yy==list[f+1].yy)\
&&(list[f].mm==list[f+1].mm)\
&&(list[f].dd>list[f+1].dd))){
STYDENT tmp = list[f];
list[f] = list[f+1];
list[f+1] = tmp;
flag=1;
}
}
}
puts("LIST:\n");
for(int b=0;b<n;b++){
printf("%-45s [%s %u], %u.%2u.%4u\n",list[b].fio,list[b].spe,list[b].nog,list[b].dd,list[b].mm,list[b].yy);
}
return 0;
}