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

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

最佳答案

它不会退出循环,因为*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";
}

关于c++ - 输入Ctrl + Z结束阅读单词将导致循环错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10240626/

10-13 09:48
查看更多