输入Ctrl + Z结束读取单词将导致循环错误

时间:2012-04-20 05:12:47

标签: c++

这是我的代码,如果你输入“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”退出循环

那么第一个代码的确切问题是什么?

1 个答案:

答案 0 :(得分:2)

它不会退出循环,因为*word不是空字符; word仍然指向上一次迭代中读取的缓冲区,当按Ctrl + Z时它会被删除。

你应该把循环写成:

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

然后按Ctrl + Z

后它应该退出循环

此外,最好将word声明为std::string而不是char[80]

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

while (cin >> word)
{  
  cout << "\t\"" << word << "\"\n";
}