Ошибка при выводе сведений о студентах - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д