【问题标题】:When i run a program on eclipse, the console shows nothing until I type in something, then takes that as the first input (for scanf for example) [duplicate]当我在eclipse上运行程序时,控制台什么也不显示,直到我输入一些东西,然后把它作为第一个输入(例如scanf)[重复]
【发布时间】:2022-02-23 06:12:25
【问题描述】:

所以在运行 Ubuntu 的 vm 上的旧安装遇到太多问题后,我刚刚在 windows 上安装了 eclipse。

除了我在标题中写的以外,所有问题都消失了。无论我运行哪个程序,scanf 文本都不会首先出现。当我输入所有可以输入的内容时,它会显示文本。举个例子吧:

#include <stdio.h>
#include <stdlib.h>

int main() {

    int number1;
    int number2;

    printf ("Type in a number \n");              
    scanf ("%d", &number1);                                

    printf ("Type in a number \n");
    scanf ("%d", &number2);

    int number3 = number1 * number2;

    printf ("%d", number3);                                      


    return 0;
}

控制台如下所示:

2
3
Type in a number 
Type in a number 
6

2 和 3 我必须先输入,然后显示最后三行。不应该是这样的吧?

感谢您的帮助!

【问题讨论】:

  • Eclipse 控制台的这种方式很有趣。我通常在每个printf 后面加上一个fflush(stdout); 来解决它。
  • setbuf(stdout, NULL)相比,更好的折衷方案是setlinebuf(stdout),并确保所有printf在格式字符串的末尾都有\n

标签: c text console


【解决方案1】:

写作似乎有效

setbuf(stdout, NULL);

进入每个程序的每个主要部分。它确实解决了这个问题,但也许还有另一个修复方法并不像每次都这样做那么烦人。这还不错,但我不明白为什么它只是在另一个 eclipse 实例上工作,但在这里没有。

【讨论】:

  • 如果您对输出函数有许多函数调用,则禁用输出流上的缓冲可能会对性能产生重大影响。因此,我宁愿建议在输出函数调用和输入函数调用之间调用fflush( stdout );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2021-06-05
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多