错误读取文件C时

时间:2018-01-04 22:48:21

标签: c file file-handling

我收到此代码的错误。输出如下所示: enter image description here

为什么输出正常?

我希望输出为:

  

2 ppa 90 90 98 89 49 83.20 B
  初中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();
}

1 个答案:

答案 0 :(得分:0)

如果要以文本模式或二进制模式读取/写入文件,则必须下定决心。您无法以文本模式打开文件并以二进制模式写入,反之亦然。

要以二进制模式阅读,请将文件打开为二进制文件(使用" 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...;

要以文本模式进行读/写,请以文本模式打开文件,使用fscanf(fptr, ...)fprintf(fptr, ...)。同样,如果您的文件包含二进制数据,则必须使用新文件输入删除文件start。

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