0

以下は、文字を入力として受け取り、それを出力として与える C++ のコードです。Ctrl+Cこの連続するまでieを押さないでください^C

#include<iostream>
using namespace std;
int main(void)
{
    char c;
    do
    {
        c = cin.get();
        cout.put(c);
    }while((c = cin.get())!='\0');
    return 0;
}

問題は次の出力です:-

hello
hlo

hello
el

なぜ最初の出力が来るのかはわかっていますが、2番目の出力はどうですか? enterまた、キーを 1 回だけ押しているときに 2 つの新しい行があるのはなぜですか。助けてもらえますか?

4

4 に答える 4

2

最初cin.get()は、do-while ループ コード内でスレッドをブロックします。入力を取得した後、Enter キーを押すと、2 つの改行が表示されます。これはcin.get()、do-while ループ内でコードがブロックされており、Enter キーを押すと が にcなるため'\n'です。次に何が起こるかですcout.put('\n');

この時点cin.get()で、do-while 条件で がスレッドをブロックしているためh、最初lの と. をスキップすることになりoます。

于 2013-08-30T19:02:52.483 に答える
1

cin.get()ループの条件を見てください。ループの反復ごとに 2 回呼び出します。欠落している文字は比較され'\0'、破棄されます。

于 2013-08-30T18:57:47.317 に答える
0

この問題では、2 つの重要な点に留意する必要があります。これらは:-

  1. 文字列の最後でキーを押すreturnと、それもバッファに格納され、格納されているすべての文字とともに標準出力にプッシュされます。
  2. return出力は、文字列 (キーを含む) の文字数が偶数か奇数かによって異なります。

ひもを入れて打ったhello!とします。return次に、もう一度入力hello!してreturnキーを押します。どちらの場合も、総文字数 (どちらの場合も) は であり、 では7ありません6。この場合、出力は次のとおりです。

hello!
hlo

hello!
el!_

ここで_、表示されるカーソルを示します。これはreturn、最初の文字列の後にヒットしたキーがループcin.get()内のコマンドによって読み取られたため、出力されたためです。do-whileその後、制御はdo-while条件に移り、2 番目の文字列の を読み取りましたh。これが、2 番目の出力に出力されない理由hです。その後、すべての偶数文字が表示されます。!これが印刷される理由です。その後、その位置で実行を一時停止する条件returnによってキーが検出されます。do-while_

ここで、returnキーを 1 回押すと、 return1 回が入力され、もう 1 回が出力であるため、2 回取得returnされます。

于 2013-09-01T09:54:09.690 に答える