【问题标题】:Eclipse CDT unexpected output after compiling C Program编译 C 程序后 Eclipse CDT 意外输出
【发布时间】: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();

标签: c gcc eclipse-cdt


【解决方案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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多