保持循环直到用户输入空白行?

时间:2013-08-04 09:41:38

标签: c++

所以我遇到了以下问题。我的目标是创建一个循环,一直持续用户输入,直到用户没有输入任何内容为'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循环中,程序甚至没有给我输入任何输入的机会,它只是打印“输入名称:”,然后立即退出循环,继续执行其余的程序。为什么会这样?

6 个答案:

答案 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";