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 に答える