gpt4 book ai didi

c - printf 不在控制台上打印

转载 作者:太空狗 更新时间:2023-10-29 16:20:55 25 4
gpt4 key购买 nike

我正在开始学习 C 语言。我使用 eclipse (juno) 作为我的 IDE 并安装了 CDT 插件。我还解压了 mingw64(GCC 编译器)。我写了一个非常简单的程序,看看它是否有效。这是我的代码:

#include <stdio.h>

int main()
{
int age;
printf("Hello, please enter your age:\n");
scanf("%d", &age);
printf("Your age is %d", age);
return 0;
}

问题是输出缓冲区中充满了第一个printf 的字符串值,但没有将它输出到控制台。我必须输入一个数字,然后缓冲区才会将所有数据倒入控制台,所以我看到控制台是这样的:

1
Hello, please enter your age:
Your age is 1

而不是预期的是:

Hello, please enter your age:
1
Your age is 1

现在,我发现我可以在第一个 printf 之后使用 fflush(stdout) 但我认为这个解决方案并不优雅,甚至没有必要。关于如何克服这个问题的任何想法?

编辑 - 因为我在大学里学习这个,所以我不能使用类(class)中没有学过的任何东西,所以我只能使用printfscanf

新编辑 - 我想我已经找到了解释。正如我所说,我正在输出到 Eclipse 中的控制台 View 。奇怪的是,如果我从 Windows 的命令行编译并运行程序,我会得到想要的结果。因此,我认为 eclipse 实际上是将输出写入文件并在控制台窗口中呈现。如何强制 eclipse 在我的运行配置中打开一个真正的命令行窗口?

最佳答案

输出被缓冲。

stdout 默认是行缓冲的,这意味着 '\n' 应该刷新缓冲区。为什么你的情况没有发生?我不知道。我需要有关您的应用程序/环境的更多信息。

但是,您可以使用 setvbuf() 控制缓冲:

setvbuf(stdout, NULL, _IOLBF, 0);

这将强制对标准输出进行行缓冲。

setvbuf(stdout, NULL, _IONBF, 0);

这将强制 stdout 无缓冲,因此您不需要使用 fflush()。请注意,如果您有大量打印件,这将严重影响应用程序性能。

关于c - printf 不在控制台上打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13035075/

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