C++ 输入Ctrl+;Z表示结束读取单词将导致循环错误
这是我的代码,如果您输入“Ctrl+Z”,它应该会完成,但它将进入循环模式,并重复写入最后一个单词C++ 输入Ctrl+;Z表示结束读取单词将导致循环错误,c++,C++,这是我的代码,如果您输入“Ctrl+Z”,它应该会完成,但它将进入循环模式,并重复写入最后一个单词 #include <iostream> using namespace std; int main() { char word[80]; do { cin >> word; if (*word) cout << "\t\"" << word << "\"\n"; } while (*word); }
#include <iostream>
using namespace std;
int main()
{ char word[80];
do
{ cin >> word;
if (*word) cout << "\t\"" << word << "\"\n";
} while (*word);
}
#包括
使用名称空间std;
int main()
{字符字[80];
做
{cin>>单词;
如果(*word)不能,它不会退出循环,因为*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";
}
std::字符串单词;//#包括
while(cin>>word)
{
非常感谢您的回复,但为什么我的代码没有真正工作?看看我在第一篇文章中添加的第二个代码。它工作正常,按crtl+z将退出循环。那么第一个代码的确切问题是什么呢?@陌生人:因为getline
即使无法读取任何内容,也会在其参数中写入空字符串,而(正如答案所说)>
仅在成功读取和转换某些内容时才修改其操作数;如果关闭流,则不会用空字符串覆盖word
。@MikeSeymour感谢您的回复,@Nawaz您的代码也很好,但它有一个问题,首先我不允许使用字符串,其次您的代码将写入最后一个单词a按ctrl+z后,但我需要在每个单词后按enter后,程序写入它,ctrl+z只退出循环和程序。那么我该怎么办?
std::string word; //#include <string>
while (cin >> word)
{
cout << "\t\"" << word << "\"\n";
}