Программа, считывающая файл txt, обнаружила ошибку после выполнения цикла ( %d )

#c

Вопрос:

Извините за языковую разницу, спасибо

В первом я ввел данные ( программа для ввода данных ученика , учитель попросил использовать .txt )

 #include"stdio.h" #include"stdlib.h" #include"string.h" void delete_n(char a[]){  size_t x=strlen(a);  if(a[strlen(a)-1]=='n'){  a[strlen(a)-1]='';  } } struct age{  char id[10];  char name[50];  int numb;  int score; }; void sx(age dnu[], int n){  age a;  for(int i=0;ilt;n;i  ){  for(int j=i 1;jlt;n;j  ){  if(dnu[i].numblt;dnu[j].numb){  a=dnu[i];  dnu[i]=dnu[j];  dnu[j]=a;  }  }  } } void file(age dnu[],int n){  FILE *f;  f = fopen("ex3","w");  if(f==NULL){  printf("Error");  exit(0);  }  fprintf(f,"%dn",n);   for(int i=0;ilt;n;i  ){  fprintf(f," %sn",dnu[i].id);  fprintf(f,"%sn",dnu[i].name);  fprintf(f," %d n",dnu[i].numb);  fprintf(f," %d n",dnu[i].score);  }   fclose(f); } void out(age dnu[],int n){  printf("s  s  s  s","Ma nganh","Ten nganh","So sinh vien ","Diem trung tuyenn");  for(int i=0;ilt;n;i  ){  printf("s  s  d  d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score);  printf("n");  } } int main(){   age *dnu;  int n;  printf("Nhap so nganh hoc can quan ly : ");  scanf("%d",amp;n);  dnu = (age*)malloc(n*sizeof(age));  for(int i=0;ilt;n;i  ){  fflush(stdin);  printf("Nhap ma nganh hoc : ");  fgets(dnu[i].id,sizeof(dnu[i].id),stdin);  delete_n(dnu[i].id);  fflush(stdin);  printf("Nhap ten nganh hoc : ");  fgets(dnu[i].name,sizeof(dnu[i].name),stdin);  delete_n(dnu[i].name);  fflush(stdin);  printf("Nhap so sinh vien : ");  scanf("%d",amp;dnu[i].numb);  printf("Nhap diem trung tuyen : ");  scanf("%d",amp;dnu[i].score);  }  sx(dnu,n);  out(dnu,n);  file(dnu,n);  free(dnu);     }  

Затем вторую программу , я хочу, чтобы выходные данные студента , но петля лишь выполнить 1 раз, затем ошибка я думаю , мои ошибки fscanf(f,"%d",....) , я думаю, что функции fscanf не является хорошим выбором , еще раз извините за незнания языка , вы не должны обращать внимание ни на что другое , я просто думаю, что ошибка находится в разделе «файл»

 #include"stdio.h" #include"stdlib.h" #include"string.h"  struct age{  char id[10];  char name[50];  int numb;  int score; }; int main(){  age dnu[20];  char x[50];  int d;  int n;  FILE *f;  f = fopen("ex3","r");  if(f==NULL){  printf("Error");  exit(0);  } // if( fgets(x,60,f)!=NULL){ // puts(x); // }    fscanf(f,"%d",amp;n);   for(int i=0;ilt;1;i  ){  fscanf(f," %s ",amp;dnu[i].id);  fscanf(f," %s ",amp;dnu[i].name);  fscanf(f,"%d",amp;dnu[i].numb);  fscanf(f,"%d",amp;dnu[i].score);  }  printf("s  s  s  s","Ma nganh","Ten nganh","So sinh vien ","Diem trung tuyenn");  for(int i=0;ilt;n;i  ){  printf("s  s  d  d",dnu[i].id,dnu[i].name,dnu[i].numb,dnu[i].score);  printf("n");  }  fclose(f); }   

вы можете увидеть изображения, введите описание изображения здесь

Комментарии:

1. Извините, но опубликованный код не компилируется как C — там нет типа age . Я замечаю на снимке экрана, что вы используете .cpp файлы.

2. я хочу, чтобы программа 2 получала данные из программы 1

3. на скриншоте показаны данные , которые я ввел из программы 1, и данные, которые выводит программа 2 . В середине находится текстовый файл

4. вы можете видеть программу 2 ,в первый раз цикла for программа 2 выполняется верно, затем она завершается ошибкой

5. Вы смешиваете использование fgets(..., stdin) с scanf() волей, как правило, приводит к проблемам, которые вы, похоже, используете fflush(stdin) , чтобы обойти. Но поведение не определено. Получите все входные fgets() данные и sscanf() при необходимости примените их к входной строке. Удалите все fflush(stdin) . Переименуйте файлы .cpp в .c. Замените каждое использование age на struct age .