while循环后的语句未执行

时间:2014-04-29 11:25:26

标签: c++ loops

我遇到了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循环之前和之内的语句,我不知道为什么。

2 个答案:

答案 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建议的空行。