1

これが私のコードです。「Ctrl+Z」と入力すると終了するはずですが、ループモードになり、最後の単語の書き込みを繰り返します。

#include <iostream>
using namespace std;
int main()
{  char word[80];
   do
   {  cin >> word;
      if (*word) cout << "\t\"" << word << "\"\n";
   }  while (*word);
}

「Ctrl+Z」を押すと、この単純なプログラムは終了するはずですが、なぜこのように進まないのですか?何が問題なのですか?

このコードを見てください:

{  char line[80];
   do
   {  cin.getline(line,80);
      if (*line) cout << "\t[" << line << "]\n";
   } while (*line);
}

最初のコードと似ていますが、今回は正常に動作しており、「Ctrl+Z」を押すとループを終了します。

では、最初のコードの正確な問題は何ですか?

4

1 に答える 1

2

*wordはヌル文字ではないため、ループを終了しません。word引き続き前の反復で読み取られたバッファを指し、Ctrl+Zを押すと消去されます。

ループは次のように記述する必要があります。

while(cin >> word) { /* your code */ }

Ctrl + Zを押すと、ループを終了する必要があります

また、:の代わりにwordとして宣言することをお勧めします:std::stringchar[80]

std::string word; //#include <string>

while (cin >> word)
{  
  cout << "\t\"" << word << "\"\n";
}  
于 2012-04-20T05:16:35.013 に答える