编译 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 创建凭据提供程序

Eclipse CDT:如何在 C 源代码上使用 GCC C++ 编译器?

带有 Visual Studio 2013 编译器的 Eclipse CDT (C++ IDE)

Eclipse CDT vs NetBeans C++ vs [重复]

C++ opencv 编译错误 - Windows7 64-bit using Eclipse CDT

Eclipse搭建c环境(CDT)二