while 循环之后的语句未执行
Statement after while loop isn't executed
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
来检测空行。
相关文章:
- 如何及时执行if语句?
- 获取上次执行的返回语句的行
- 如何仅在父循环的所有迭代都为真时才执行嵌套的 if 语句?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何知道调试时执行了哪个语句
- 在可变函数调用中执行一次语句
- 在多个对象上执行同一语句的零成本抽象
- 我怎样才能接受输入作为双精度值并执行 IF ELSE 语句
- c++:if 语句无法正常运行,并继续执行无效输出
- 为什么 cout 语句在传递指向函数的指针时没有执行?
- c++ IF 语句执行,但添加 ELSE 会显示错误
- C 程序如果功能中的语句不执行.在逻辑上似乎是错误的
- 当您希望在Arduino Uno编程中同时执行不同函数时,使用什么代码/语句
- OR 语句执行所有评估
- C++ Switch 语句在中断后执行
- 强制执行C++语句顺序
- SQLITE 内存不足 无法执行语句
- 如何在c++中执行语句
- 如何使用c++/python程序在终端中运行程序,然后在该程序中执行语句
- QODBCResult::exec: 无法执行语句:"[Microsoft][ODBC SQL Server Driver]COUNT 字段不正确或语法错误