gpt4 book ai didi

c - 为什么 scanf 会改变执行顺序?

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:17 25 4
gpt4 key购买 nike

我正在捕获一些用户输入并将其保存到结构和文件中。

对于每个字段,我先用printf写一个提示,然后用scanf抓取数据到struct,最后用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

文件在所有情况下都是正确写入的,为什么只有一台计算机在 scanfprintf 方面有问题?

结构定义是:

typedef struct roboto
{
char name[10];
char color[10];
int energy;
float height;
float weight;
}robot;

最佳答案

我猜这是在提示用户输入之前未刷新 stdout 的问题。要解决此问题,您可以尝试在每个打印语句之后使用 fflush(stdout); 刷新 stdout。例如:

printf("\n color: ");
fflush(stdout);
scanf("%s",&robot1.color);
fputs(robot1.color, f);
fputs("\n",f);

关于c - 为什么 scanf 会改变执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7311896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com