读取文件 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"),使用 fread
和 fwrite
。如果您的文件已经包含文本数据,那么您必须删除该文件并从新文件开始。
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
我在使用此代码时遇到错误。输出如下所示: 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"),使用 fread
和 fwrite
。如果您的文件已经包含文本数据,那么您必须删除该文件并从新文件开始。
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