Printf并不流行

时间:2013-02-15 01:42:30

标签: c++ printf

我是c +编程的新手,我在lynda.com教程后面临一个问题。教程视频似乎没问题,但这不适合我。

#include <stdio.h>

enum { max_string = 127 };

static char string[max_string + 1 ] = "";

int main( int argc, char ** argv ) {
    printf("Type a string: ");
    fgets(string, max_string, stdin);
    printf("The string is %s", string);
    return 0;
}

当我跑步时,出现这样的空白,当我在毯子空间中找到像“嘿”这样的东西时,我需要这样做:

hey
Type a string: The string is hey

这对我来说很奇怪,我不知道我做错了什么。 我正在使用Eclipse btw。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

您的标准输出流似乎是行缓冲的,这意味着在您打印完整的行之前,您打印的文本不会显示。如果您正在写入交互式设备, 应该无缓冲;或许某些事情阻止系统意识到输出设备是交互式的。

添加

fflush(stdout);

在您的第一个printf应该强制立即显示"Type a string: "提示后(即使您的输出未缓冲,fflush(stdout)也无害)。

我打算建议您更改第二个printf

printf("The string is %s", string);

为:

printf("The string is %s\n", string);

确保程序的输出以换行符结束(如果不是,某些系统可能会出现异常) - 但fgets()实际上会在换行符中留下换行符(除非输入行很长)。最终你会想要处理那种事情。