所以我遇到了以下问题。我的目标是创建一个循环,一直持续用户输入,直到用户没有输入任何内容为'cin>>',将行留空,只需按ENTER键继续前进,此时该程序应该突破循环并继续执行其余的程序。像这样:
do {
cout << "\nEnter a name: ";
cin >> input1;
if (input1.empty())
{
break;
}
else
{
user_name = input1;
}
} while (!input1.empty());
正如你所看到的,我已经尝试过使用empty()函数,但是这不起作用,程序只是停留在循环中并且不会爆发,无论我按Enter多少次。它只是一直提示我输入一个名字。我也尝试过像
这样的东西if (input1 == "")
但这也不起作用。有人可以帮忙吗?我如何摆脱这种循环?
更新:好的伙计们,我已经尝试了你的建议,而且它有效!非常感谢!不幸的是,尽管getline函数有效,但它也为我创造了一个新问题。基本上,在第一个初始循环中,程序提示输入名称,我输入名称,名称存储在user_name中。但是,在SECOND循环中,程序甚至没有给我输入任何输入的机会,它只是打印“输入名称:”,然后立即退出循环,继续执行其余的程序。为什么会这样?
答案 0 :(得分:6)
使用此getline(std::cin, input1)
:
while (getline(std::cin, input1))
{
if (input1.empty())
break;
username =input1;
std::cout << input1 << std::endl << "Enter Input : ";
}
答案 1 :(得分:4)
使用std::getline(cin, input1);
代替从控制台读取一行。
使用cin
直接从stdin中读取完全一个单词。如果用户没有输入任何内容,则没有给出任何单词,cin
也没有返回(甚至没有执行空检查)。
使用std::getline
后,您可以按原样保留空检查:
std::getline(cin, input1);
if(input1.empty())
break;
BTW:在C ++中,您还应该检查基础流是否遇到错误。所以检查cin或getline的返回码。这可以使用以下代码完成:
if(!std::getline(cin, input1))
// I/O error
答案 2 :(得分:2)
通常,循环直到输入空行为:
while ( std::getline( line ) && !line.empty() ) ...
如果需要提示:提示是输入逻辑的一部分,并且 应该这样实施:
std::string
getlineWithPrompt( std::string const& prompt )
{
std::cout << prompt;
std::string results;
return std::getline( std::cin, results )
? results
: std::string();
}
然后你做了类似的事情:
std::string line = getlineWithPrompt( "prompt for first line" );
while ( !line.empty() ) {
// ...
getlineWithPrompt( "prompt for further line" );
}
(这实际上有点简化,因为它处理硬错误 在输入,文件结束和空行相同,这是 在专业软件中很少是正确的。但对于 学习目的,应该就足够了。)
答案 3 :(得分:0)
这也有效:
char line[128];
do
{
cout << "Enter something: ";
gets(line);
} while (strcmp(&line[0], "\0") != 0);
答案 4 :(得分:0)
Cin不会读取您称为空行的空格。 Getline可能会这样做,但我不完全确定。您可以定义用户键入的结束字符并检查该字符。获取也可以,它只是将起始字符设置为0x0。注意gets(),它很容易让缓冲区溢出。
答案 5 :(得分:0)
@JamesKanze
这样的东西可以退出while循环吗?
string str = "foo";
while (str == "foo"){
getline(cin, str);
}
str = "foo";