0

我是 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 顺便说一句。

有人可以帮我吗?

4

1 回答 1

2

您的标准输出流似乎是行缓冲的,这意味着您打印的文本在您打印完整行之前不会出现。如果您正在写入交互式设备,它应该是无缓冲的;也许有什么东西阻止了系统意识到输出设备是交互式的。

添加

fflush(stdout);

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

我正要建议改变你的第二个printf

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

至:

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

以确保您的程序的输出以换行符结尾(如果不是,某些系统可能会出现异常) - 但fgets()实际上将换行符留在您的字符串中(除非输入行很长)。最终你会希望能够处理这种事情。

于 2013-02-15T01:46:34.100 回答