当没有输入任何输入时,C++getline不为空
C++ getline is not empty when no input is entered
我是c++的新手,仍在努力了解输入/输出流的工作方式。
我目前正在尝试编写一个函数,以确保用户输入一个int,并告诉他们输入是空的还是无效的int
我正在使用getline,并尝试使用cin.clear和cin.ignore,但我似乎无法让它发挥作用,也不知道哪里出了问题。
如果我输入了一个字母,它会起作用,但如果我只按回车键而没有输入,它不会说没有检测到输入。
void testStuff()
{
string number;
ws(cin);//skips Whitespaces
if (getline(cin, number) && number.end() !=
find_if_not(number.begin(), number.end(), &isdigit))
{
if (number.empty())
{
cout << "No input detected" << endl;
testStuff();
}
cout << "Please input a Valid number" << endl;
testStuff();
}
}
假设您的ws
按指定工作(跳过输入中的空白),那么在调用getline
时,必须输入空白以外的内容。因此,当调用getline
时,该非空白字符必须在输入缓冲区中等待,并且getline
必须返回非空字符序列(即,从第一个非空白字符到下一个新行的所有字符)。
例如,让我们编写自己的ws
,显示它跳过的字符:
void ws(std::istream &is) {
while (std::isspace(is.peek())) {
char ch;
is.get(ch);
std::cout << "Read: " << (int)ch << 'n';
}
}
现在,当我们调用testStuff()
并按下enter时,我们得到Read: 10
作为我们的输出——即ws
已经读取并跳过了我们输入的新行。
因此,为了调用getline
,用户必须输入除空白之外的内容,而新行就是空白。所以,但在调用getline
时,我们知道输入缓冲区中有一些非空白字符在等待,所以当调用getline
时,它必须产生非空结果。
我假设我不知道实现的每个函数都写得正确。然后,我有这样的代码(简化):
#include <iostream>
#include <string>
using namespace std;
int main() {
string number;
if (getline(cin, number))
{
if (number.empty())
{
cout << "No input detected" << endl;
main();
}
cout << "Please input a Valid number" << endl;
main();
}
}
我不知道find_if_not(number.begin(), number.end(), &isdigit)
的实现,所以我跳过了它。我已经把源代码放在了Ideone.com上,你可以在这里查看。通过"刚进入"后,程序就无效了。这意味着,您没有向我们展示的一个函数实现工作不正确。为了帮助您,我们需要完整的源代码(如果没有,只需要部分)。此外,您应该跳过"使用命名空间std;"。我认为number.end() != find_if_not(number.begin(), number.end(), &isdigit))
执行错误。你应该想想有人在评论中告诉你的话——"如果字符串为空,find_If_not唯一能返回的就是number.end().number.end(()==number.end),并且没有输入正文。">
- 当用户键入分隔符时,停止getline()输入
- 我有三个 getline,但是一旦编译,输入就太多了
- std::getline没有在while循环中重新请求用户输入
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- 如何将 getline 与标准输入一起使用?
- 使用 cin 或 getline() 输入空值
- 使用 getline 从输入文件打印时如何忽略空白行
- 对c++中的输入使用getline函数时忽略第一个字符
- 如果用户输入的输入大于 char 数组,则 cin.getline 会跳过输入提醒
- 虽然带有 getline 的循环不会因用户输入而结束
- 有没有办法将 getline() 与外部文本文件一起使用,然后重新获得 cin 的控制权以从控制台获取输入?
- C++ - 重复 std::getline() 作为用户整数输入?
- 无法使用 getline() 输入字符串.它只读取一个字符串
- 如何使用 std::in 和 getline() 检测后台进程中从 bash 注入的输入
- 使用 getline 从输入文件读取一行到输出文件
- C :使用getline从文本文件中输入,要么跳过第一行,要么将其余部分弄乱
- 使用 getline 忽略用户输入中的制表符和换行符
- 我想让我的控制台更加丰富多彩.如何在用户输入时使用户输入(通过getline获得)
- 验证输入和getline()函数
- 打开文件流输入的Getline问题