我正在使用 Eclipse(最新版本)和 Cygwin GCC(我在使用 MinGW GCC 时也发现了同样的问题,因此更改了 GCC)。 考虑一个简单的代码片段:
#include<stdio.h>
int main(){
char a[5];
printf("prompt1\n");
scanf("%s",a);
printf("\Hi\t%s",a);
}
该图像显示了程序的整个输出,正如您所看到的,它应该采用完全不同的顺序。 这个问题也在我的旧笔记本电脑上出现(相同版本的 Eclipse,带有 MinGW)。然而,我(显然)从未在旧版本的 Eclipse 上遇到过这个问题。 (该片段有不同的提示文本..但您明白了它的要点)
编辑:也发生在 gets() 函数中(但 gets 和 scanf 显然以正确的顺序显示)
最佳答案
printf
使用stdout
,它是一个缓冲文件流。这意味着,它在其内部缓冲区已满(缓冲区大小为 512 字节或其他值)后将数据发送到输出。要立即将数据转储到控制台,请在 scanf
之前使用函数 fflush
。
#include<stdio.h>
int main(){
char a[5];
printf("prompt1\n");
fflush(stdout);
scanf("%s",a);
printf("Hi\t%s",a);
}
关于c - 程序执行未按预期顺序发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57760271/