c - 程序执行未按预期顺序发生

标签 c eclipse eclipse-cdt

我正在使用 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/

相关文章:

c++ - Qt 4.7 在 Windows 上使用 Eclipse?

c++ - 如何使用 Eclipse CDT 自动从命名空间中取出一个类?

c - scanf 读取 "Enter"键

c++ - 声明 2 数组时堆栈溢出

c - 在 C 中创建图案(不是菱形)的嵌套循环

java - 为什么在我的项目构建中找不到我的 jar 文件和 .war 文件? maven

c - 如何在Eclipse(CDT)中设置 "./configure --without-iconv"?

c - 尝试理解 printf() 的 gcc 汇编输出

java - 计算器中的等于按钮什么都不做(Android 开发者工具)

java - Gradle Eclipse 插件在生成的 .classpath 文件中不包括导出的 ="true"