这是我的代码,如果您输入“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/