这个程序在win_tc里面能够运行,但为什么在vc里面编译通不过?

2025-04-24 22:13:28
推荐回答(3个)
回答1:

将void main() 改成 int main(void)
并在main函数最后 加一行: return 0;

输出结果的时候最后一个结果输出两遍是因为 feof 读取到EOF时,才置标志位,所以最后一行除了读取最后一个结果数据的输出一次,wihle循环还要再读取一次EOF,然后再输出一次最后一次的结果,之后置标志位,跳出循环。
要改成下面的代码,就不会输出两次了

fread((char*)(&stud),sizeof(struct student),1,fp);
while(!feof(fp))
{
printf("%10s,%10s,%6.2f,%6.2f,%6.2f\n",stud.class,stud.name,stud.math,stud.english,stud.computer);
fread((char*)(&stud),sizeof(struct student),1,fp);

}

回答2:

class是C++的关键字,不能用作变量名。

修改后:

#include"stdio.h"
#include"stdlib.h"
struct student
{
char classes[10],name[10];
float math,english,computer;
};
void main()
{
struct student stud;
FILE *fp;
char ans;
if((fp=fopen("grade.dat","wb"))==NULL)
{
printf("Can't open file:grade.dat\n");
exit(1);
}
while(1)
{
printf("Please input classes,name,math,english,computer\n");
scanf("%s,%s,%f,%f,%f",stud.classes,stud.name,&stud.math,&stud.english,&stud.computer);
fwrite((char*)(&stud),sizeof(struct student),1,fp);
printf("input anyone()y/n:?");
fflush(stdin);
ans=getchar();
if(ans!='y'&&ans!='Y')
break;
}
fclose(fp);
if((fp=fopen("grade.dat","rb"))==NULL)
{
printf("Can't open file:grade.dat\n");
exit(1);
}
while(!feof(fp))
{
fread((char*)(&stud),sizeof(struct student),1,fp);
printf("%10s,%10s,%6.2f,%6.2f,%6.2f\n",stud.classes,stud.name,stud.math,stud.english,stud.computer);
}
}

回答3:

struct student
{
char class[10],name[10]; //看这里class是c++的关键字,不能用作变量名的,TC是纯c编译器,没有class关键字
float math,english,computer;
};