Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输入Ctrl+;Z表示结束读取单词将导致循环错误_C++ - Fatal编程技术网

C++ 输入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); }

这是我的代码,如果您输入“Ctrl+Z”,它应该会完成,但它将进入循环模式,并重复写入最后一个单词

#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";
}