Ошибка при выводе сведений о студентах - 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;
}

Оцени полезность:

12   голосов , оценка 3.667 из 5
Похожие ответы