2014-04-29 112 views
3

我遇到while循环的问题。 while循环后面的语句没有执行,我不知道为什么。我是C++新手,无法弄清楚这一点。我试图把一些单词作为用户的输入,并将它们存储在一个字符串向量中,只是为了练习。这里是我的代码:While循环未执行后的声明

#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循环执行中的语句和信息“新增”,而是“做”的消息不显示。我已经通过在while循环之后指定其他语句(例如,从同一个字符串向量中获取&显示值的for循环)来尝试此操作,但是在此while循环执行后没有语句。只有while循环之前和之内的语句被执行,我不知道为什么。

+1

你如何终止输入流?除非你这样做,否则你永远不会退出循环。尝试将文件重定向为标准输入,例如'a.exe molbdnilo

+0

我认为它是一个无限循环,每次你给它输入它都会起作用。你必须在某个地方打破循环。 – Himanshu

+0

好吧,我猜这应该是在用户停止输入单词后立即终止。不是这样吗? D: –

回答

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检测到空线,如约阿希姆Pilebord建议。

+0

我怎么可以如此笨拙哈哈。谢谢你:) –

+0

好吧,编程语言有很多奇怪的概念,作为初学者,很可能发生这样的错误。但这就好,我们都是这样学习的。我们所有人至少犯了一次这样的错误。 ;) – displayname

3

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


如果你想检测空行,并用这些终止条件,则需要使用std::getline

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

我认为在Linux上它是Ctrl + D,而不是Ctrl + Z。 Ctrl + Z将应用程序置于bakcground – fritzone

+0

Ctrl + Z用于Windows – Youda008

+0

@fritzone在Linux(以及OSX和BSD以及其他POSIX系统)上,它通常是'CTRL-D',但是这个程序是一个windows程序(“ stdafx.h“'header和'_tmain'函数表示Visual Studio),其中使用了'CTRL-Z'。 –