读取文件 C 时出错

ERROR While read File C

我在使用此代码时遇到错误。输出如下所示: enter image description here

为什么输出一半正常?

我希望输出为:

2 ppa 90 90 98 89 49 83.20 B
junior 90 90 90 90 90 90.00 A

这是我的代码:

void class_result(){
     system("cls");
     fptr=fopen("stdnin.txt","r");
     if(fptr==NULL)
     {
       printf("ERROR!!! FILE COULD NOT BE OPEN\n\n\n Go To Entry Menu to create File");
       printf("\n\n\n Program is closing ....");
       getch();
       exit(0);
     }

      printf("\n\n\t\tALL STUDENTS RESULT \n\n");
      printf("====================================================\n");
      printf("R.No.  Name       P   C   M   E   CS  %age   Grade\n");
      printf("====================================================\n");
//  while(fscanf(fptr,"%d %s %d %d %d %d %d %.2f %c",&st.rollno,st.name,&st.p_marks,&st.c_marks,&st.m_marks,&st.e_marks,&st.cs_marks,&st.per,st.grade)!=EOF){


 while(fread(&st,sizeof(st),1,fptr))
   {
       printf("%-6d %-10s %-3d %-3d %-3d %-3d %-3d %-3.2f %-2c\n",st.rollno,st.name,st.p_marks,st.c_marks,st.m_marks,st.e_marks,st.cs_marks,st.per,st.grade);
     }
//      while(fread(&st,sizeof(st),1,fptr))
//        printf ("%d %s \n",st.rollno, st.name);
 fclose(fptr);
     getch();
}

要read/write文件是文本模式还是二进制模式,你得自己拿定主意。您不能以文本模式打开文件并以二进制模式写入,反之亦然。

要以二进制模式读取,请以二进制方式打开文件(使用 "rb" 而不是 "r"),使用 freadfwrite。如果您的文件已经包含文本数据,那么您必须删除该文件并从新文件开始。

fptr = fopen("stdnin.txt", "ab+");
fwrite(&st,sizeof(st),1,fptr);
fclose(fptr);
...

fptr = fopen("stdnin.txt", "rb");
while(fread(&st, sizeof(st), 1, fptr))
    printf...;

要read/write以文本模式,以文本模式打开文件,使用fscanf(fptr, ...)fprintf(fptr, ...)。同样,如果您的文件包含二进制数据,那么您必须删除该文件并从一个新文件开始进行文本输入。

要从控制台读取文本输入,您可以使用 scanf,而不是 gets