我正在捕获一些用户输入并将其保存到结构和文件中。
对于每个字段,我首先使用printf
编写提示,然后使用scanf
将数据捕获到结构中,最后使用fprintf
写入文件。
该程序运行正常,但仅在一台计算机上,一个scanf
在相应的printf
之前执行。
这是问题的核心:
printf("\n color: ");
scanf("%s",&robot1.color);
fputs(robot1.color, f);
fputs("\n",f);
printf("\n energy: ");
scanf("%d",&robot1.energy);
fprintf(f,"%d",robot1.energy);
fputs("\n",f);
printf("\n height: ");
scanf("%f",&robot1.height);
fprintf(f,"%.2f",robot1.height);
fputs("\n",f);
printf("\n weight: ");
scanf("%f",&robot1.weight);
fprintf(f,"%.2f",robot1.weight);
fputs("\n",f);
我使用Dev-C++在两台Windows PC上进行了测试,在使用GCC的Mac上进行了测试。其中一台Windows机器就是造成这种混乱的机器。
正确执行(包括用户输入)是:
color: red
energy: 100
height: 30.5
weight: 500.0
但是在麻烦的电脑中,输入能量值后,它什么都没显示,继续我必须输入高度值。 之后,我看到身高和体重提示,并通过捕捉体重来完成:
color: red
energy: 100
30.5
height:
weight: 500.0
在所有情况下都能正确写入文件,因此,为什么只有一台计算机在scanf
和printf
时遇到问题?
结构定义是:
typedef struct roboto
{
char name[10];
char color[10];
int energy;
float height;
float weight;
}robot;
答案 0 :(得分:4)
我猜测在用户被提示输入之前,stdout
没有被刷新的问题。要解决此问题,您可以尝试使用fflush(stdout);
在每个打印语句后刷新标准输出。例如:
printf("\n color: ");
fflush(stdout);
scanf("%s",&robot1.color);
fputs(robot1.color, f);
fputs("\n",f);
答案 1 :(得分:3)
标准输出是缓冲的,因此您无法确定何时写入。
调用fflush(stdout)
后调用printf
强制输出,然后你可以确定输出将被写入。
答案 2 :(得分:0)
也许检查scanf
的返回值会给你一些线索。忽略这个价值只是在惹麻烦。