我遇到了while循环问题。 while循环后的语句没有被执行,我也不知道为什么。我是C ++的新手,无法弄清楚这一点。我试图将一些单词作为用户的输入并将它们存储在字符串向量中,这只是为了练习。这是我的代码:
#include "stdafx.h"
#include <string>
#include <iostream>
#include <vector>
using std::vector;
using std::string;
using std::cin;
using std::cout;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
vector<string> list;
string word;
while( cin >> word )
{
list.push_back(word);
cout << "Added " << word << endl;
}
cout << endl;
cout << "Done" << endl;
system( "PAUSE" );
return EXIT_SUCCESS;
}
当我运行这个控制台应用程序时,我可以看到while循环中的语句被执行并且消息&#34;已添加&#34;但是消息&#34;已完成&#34;没有显示。我通过在while循环之后指定其他语句来尝试这一点(比如来自同一字符串向量的for循环读取和显示值)但是在执行while循环之后没有语句。只执行while循环之前和之内的语句,我不知道为什么。
答案 0 :(得分:3)
只要输入有效字符串,循环就会继续。只是输入一个空行将无法工作,因为输入操作符将阻塞,直到它读取非空白字符。您需要按 CTRL-Z (文件结束键盘快捷键)实际“终止”字符串。
如果要检测空行并将其用于终止条件,则需要使用std::getline
:
std::string line;
while (std::getline(std::cin, line) && !line.empty())
{
...
}
答案 1 :(得分:1)
你的while循环没有结束,因为cin
将始终返回soemthing != 0
,这意味着你被困在无限循环中。你需要的是循环中执行休息的另一个条件:
string stop_string = "exit";
while( cin >> word )
{
if ( stop_string.compare(word) )
break;
list.push_back(word);
cout << "Added " << word << endl;
}
或者您可以使用std::getline
来检测Joachim Pilebord建议的空行。