编译 C 程序后 Eclipse CDT 意外输出
Posted
技术标签:
【中文标题】编译 C 程序后 Eclipse CDT 意外输出【英文标题】:Eclipse CDT unexpected output after compiling C Program 【发布时间】:2015-07-29 16:22:38 【问题描述】:在使用 GCC 5.1.0 编译器在 eclipse CDT 上尝试此代码时 所有字符串都是在用户输入后打印的.. 即使使用 windows CMD 在 Visual Studio 和 Code Blocks IDE 上编译它时,该程序也能按预期正常工作..
#include <stdio.h>
static char string[128] = "";
int main()
printf("Type a string: ");
scanf("%s",string);
printf("The String is %s", string);
return 0;
Eclipse 输出:
Visual Studio 输出:
谢谢,,,
【问题讨论】:
所以 Eclipse 有一个集成的编辑器......并且 VS 启动了在控制台中运行的程序。又是什么问题?` 有什么问题?如果“意外输出”是指 IDE 插入的隐式pause
命令,那么这不是问题(如果窗口立即关闭,您将如何看到输出?)。为什么这个标签是c++
?它似乎没有使用任何 C++ 功能。
上述问题,两个IDE运行代码的顺序不一样,Eclipse让我先输入字符串-->> scanf 然后打印出所有的printf。虽然 VS 做得正确
别忘了fflush();
【参考方案1】:
好的,我现在明白了。我认为问题在于,每当您想确定代码中的给定点打印了某些内容时,您需要在该点刷新stdout
。
否则,流式传输的内容可以按实现相关的方式排队和交付(通常是小批量)
C 标准库的printf()
,当输出到stdout
并遇到换行符\n
时,会提供隐式刷新,因此您不需要自己调用flush()
。而对于 C++ 的 std::cout
,只有 std::endl
具有此属性; \n
不保证。
在 C 中故意刷新 stdout
可以这样完成:fflush(stdout);
另请参阅:Why does printf not flush after the call unless a newline is in the format string?
【讨论】:
以上是关于编译 C 程序后 Eclipse CDT 意外输出的主要内容,如果未能解决你的问题,请参考以下文章
Eclipse CDT:如何在 C 源代码上使用 GCC C++ 编译器?
带有 Visual Studio 2013 编译器的 Eclipse CDT (C++ IDE)
Eclipse CDT vs NetBeans C++ vs [重复]