保持循环直到用户输入空行
Keep looping until user enters a blank line?
所以我遇到了以下问题。我的目标是创建一个循环,不断地接受用户输入,直到用户没有在"cin>>"中输入任何内容,将行留空,并简单地按enter键继续前进,此时程序应该脱离循环,继续执行其余的程序。类似这样的东西:
do {
cout << "nEnter a name: ";
cin >> input1;
if (input1.empty())
{
break;
}
else
{
user_name = input1;
}
} while (!input1.empty());
正如你所看到的,我已经尝试过使用empty()函数,但没有成功,无论我按了多少次回车键,程序都只是停留在循环中,不会中断。它只是不断提示我输入一个名字。我也尝试过使用类似的东西
if (input1 == "")
但这也不起作用。有人能帮忙吗?我该如何打破这个循环?
更新:好的,伙计们,我试过你们的建议,效果很好!非常感谢!不幸的是,尽管getline函数有效,但它也给我带来了一个新的问题。基本上,在第一个初始循环中,程序会提示输入一个名称,我输入一个名字,这个名称存储在user_name中。然而,在第二个循环中,程序甚至没有给我输入任何输入的机会,它只是打印"输入一个名称:",然后立即退出循环,继续执行程序的其余部分。为什么会发生这种情况?
使用此getline(std::cin, input1)
:
while (getline(std::cin, input1))
{
if (input1.empty())
break;
username =input1;
std::cout << input1 << std::endl << "Enter Input : ";
}
改为使用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
通常情况下,循环直到输入空行是:
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" );
}
(这实际上有点简化,因为它处理的是硬错误在输入时,文件结尾和空行相同,即在专业软件中很少是正确的。但对于学习目的,应该足够了。)
Cin不会读取您称之为空行的空白。Getline可能会这么做,但我不完全确定。您可以定义一个结束字符,用户将键入并检查该字符。获取也可以,它只会将起始字符设置为0x0。使用gets()时要小心,它很容易导致缓冲区溢出。
这同样有效:
char line[128];
do
{
cout << "Enter something: ";
gets(line);
} while (strcmp(&line[0], " ") != 0);
@JamesKanze
所以用这样的方法退出while循环?
string str = "foo";
while (str == "foo"){
getline(cin, str);
}
str = "foo";
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 用户定义函数中的指针和输入
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 当用户键入分隔符时,停止getline()输入
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 如果用户没有输入任何内容或输入错误,如何重新输入用户的输入?
- 为什么在代码块中执行时会跳过输入用户输入的行?
- 使用 for 循环在数组中输入用户