0

わかりましたので、ユーザーが入力した他のすべての文字をエコーするはずのこのコードスニペットを教科書で見つけました。これで、他のすべての文字部分を理解しましたが、cin.get() の使用に問題があります。最初の cin.get() がある理由は理解できますが、ループ内にもあるのはなぜですか? 入力ストリームの性質を完全に把握していないと思います...

編集:クリックしただけです...私はばかです。解決してくれてありがとう。

char next;
int count = 0;
cout << "Enter a line of input:\n";
cin.get(next);

while (next != '\n')
{     
    if ((count%2) == 0)
    cout << next;
    count++;
    cin.get(next);
}

前もって感謝します!

4

6 に答える 6

3

cin.getこの場合、あなたが信じているように「テキストの行をつかむ」ことはありません。cin.getこの場合、単一の文字だけを取得します。cin.getユーザーが入力している文字を 1 つずつ、次々と読み上げます。cin.getこれがループになっている理由です。

于 2009-10-18T08:26:57.383 に答える
1

しかし、cin.get(ch) の外側の使用は何ですか cin.get() がループ内でどのように機能するか 両方の動作が異なるように見えるため、混乱を招きます cin.get を使用して取得した文字を出力するステートメントがループ内にあります(次)しかし、それは印刷されません....エンターキーを押すとすべて一緒に印刷されます...実際には、キーボードから入力したときに文字が表示されるはずですが、実際にはそのように機能していません

于 2010-09-23T15:05:07.947 に答える
1

ループの前に来る cin.get(next) への呼び出しは、バッファリングされたユーザー入力の最初の文字を変数「next」に配置するだけです。

ループに入ると、'next' に格納された文字が処理されます (偶数インデックスの場合はエコーされ、それ以外の場合は無視されます)、cin.get(next) を再度呼び出して次の文字を取得する必要があります。

于 2009-10-18T08:25:18.950 に答える
1

その印刷文字は偶数の位置に存在します

char next;
int count = 0;
cout << "Enter a line of input:\n";
cin.get(next);//gets first character (position zero) from input stream

while (next != '\n')//check whether the character is not line feed(End of the line)
{     
    if ((count%2) == 0)//checks if position is even
    cout << next;      //if yes print that letter
    count++;           //increments the count
    cin.get(next);     //gets next character from input stream
}

2つ必要ですcin.get(...)

  • while ループに入る前に、最初の文字 (位置ゼロ) を知る必要があります。
  • 次の文字を取得するための while ループ内
于 2009-10-18T08:25:51.177 に答える
0

C++ のストリームはバッファリングされます。それらを文字列と考えてください。その行の最初の文字を呼び出すとcin.get(var)、削除されて返されます。だから、それがどのように機能するかです。

例はより役立つでしょう。最初の cin.get() が実行されたときに、 :
LISP
と入力すると、cin.get() は (var. で) 戻りL、バッファは次のようになりISPます ... 次の呼び出しIは変数。バッファは次のようSPになります...

于 2009-10-18T08:19:18.043 に答える
0

istream& get(char &c) は、入力ストリームから文字を取得します。

最初の呼び出し cin.get(next) で、「hello world!」と入力しました。その後、将来の cin.get(next) は、入力ストリームに文字がなくなるまで、すべての呼び出しで h、e、l、l などをフェッチし、それがユーザーにさらに入力を求めることをブロックします。

于 2009-10-18T08:22:37.180 に答える