while 循环之后的语句未执行

Statement after while loop isn't executed

本文关键字:执行 语句 循环 之后 while      更新时间:2023-10-16

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循环中的语句被执行,消息"Added"但消息"done"没有显示。我已经尝试过在while循环之后指定其他语句(比如for循环从同一字符串向量中获取和显示值),但在执行while循环后没有语句。只执行while循环之前和循环内的语句,我不知道为什么。

只要输入有效的字符串,循环就会继续。仅仅输入一个空行是不起作用的,因为输入操作符只会阻塞,直到它读取到一个非空白字符。您需要通过按下CTRL-Z(文件末尾键盘快捷键)来实际"终止"字符串。


如果您想检测空行并将其用于终止条件,则需要使用std::getline:

std::string line;
while (std::getline(std::cin, line) && !line.empty())
{
    ...
}

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

或者你可以像Joachim Pilebord建议的那样使用std::getline来检测空行。