我对这段代码感到困惑:
#include "stdafx.h"
#include "std_lib_facilities.h"
int main()
{
string name_one;
string name_two;
string name_three;
cout << "Please enter a name: ";
cin >> name_one;
cout << "\nReading data...";
while (name_one.empty())
{
cout << "\nFailed!";
cout << "Please enter a name: ";
cin >> name_one;
cout << "\nReading data...";
}
cout << "Completed!\n";
keep_window_open();
return 0;
}
这很容易,但是当我调试它时,例如我什么都不写,只是按 Enter 键,它什么也不做。只是一直在行下向我显示一个闪烁的下划线,如果我一直按 Enter 它只会逐行跳转。为什么程序不读取条件?我想要的是,如果用户什么都不写,
while
中的条件就开始了! 最佳答案
您正在使用流提取器 >>
,它是一个格式化的输入函数。对于许多类型(例如基本类型和 std::string
),这些首先跳过当前在流中的所有空格(1),然后提取字符,只要这些字符是您要提取的数据类型的有效表示。
换句话说,当您在标准输入上按 Enter 键时,流中只会有一个换行符。换行符是空格,所以 >>
函数仍然停留在它的“跳过起始空格”模式中。只有当您输入非空白字符时,第二部分(“提取字符并尝试将它们解释为提取类型的表示”)才会启动。
如果要始终按行读取,可以使用 getline
流函数,或 std::getline
函数。您还可以将这些与 istringstream
对象结合使用以解析该行。
(1) 这种行为可以由流操纵器 skipws
and noskipws
控制,或者直接由流的 formatting flags 控制。
关于c++ - 对 while 检查感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33609317/