【问题标题】:Eclipse C printf() failEclipse C printf() 失败
【发布时间】:2013-03-05 11:20:29
【问题描述】:

我刚刚为 c++ 安装了 Eclipse,但 printf() 函数有问题。 我的代码应该从打印“给出数字”开始,但事实并非如此。如果我输入 4,这就是我得到的:

4 给个号码: 我是1号 我是2号 我是3号 我是4号
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int n=0,i;
    printf("Give the number:\n");
    scanf("%d", &n);
    for(i=1;i<=n;i++)
        printf("I am number %d\n",i);
    return EXIT_SUCCESS;
}

【问题讨论】:

  • 似乎 Eclipse 使用的“终端”不是行缓冲的。尝试在第一个 printf 之后添加 fflush(stdout);
  • 或者使用setvbuf(stdout, 0, _IOLBF, 0);使其行缓冲(在第一次使用printf()之前)。
  • 感谢@DanielFischer,成功了。
  • 我复制了您在 cmets 中发布的答案以使其成为答案,因为我有时会浏览未回答的问题以查看是否可以提供帮助,而实际上“未回答”的问题令人困惑已经有了答案。希望你不要介意。

标签: c eclipse printf


【解决方案1】:

There are three different kinds of buffering strategies:

  • 写入或读取无缓冲流的字符会尽快单独传输到文件或从文件中读取。

  • 当遇到换行符时,写入或读取行缓冲流的字符会以块的形式传入或传出文件。

  • 从完全缓冲的流中写入或读取的字符以任意大小的块的形式传入或传出文件。

正如 Daniel Fischer 和 Jonathan Leffler 指出的那样,您的终端最初似乎是完全缓冲的,这意味着您必须使用 fflush(stdout); 将流传输到终端或使用 setvbuf(stdout, 0, _IOLBF, 0); 更改其配置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多