【发布时间】:2018-04-21 10:01:29
【问题描述】:
我是 C++ 新手,但我仍在努力思考输入/输出流的工作原理。
我目前正在尝试编写一个函数来确保用户输入一个 int,并告诉他们输入是空的还是无效的 int。
我正在使用 getline 并尝试使用 cin.clear 和 cin.ignore 但我似乎无法让它工作并且不知道我哪里出错了。
如果我输入一个字母,它会起作用,但是如果我只是在没有输入的情况下按 Enter,它不会说没有检测到输入。
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();
}
}
【问题讨论】:
-
如果字符串为空,
find_if_not唯一可以返回的是number.end()。number.end() == number.end()并且正文未输入。 -
假设您的
ws按规定工作,您应该无法输入空输入。如果您只是按下enter键,它将被读取为一个换行符,它被归类为空格(即isspace('\n') == true)。要调用getline,您必须输入非空格的内容,因此您使用getline读取的内容不能为空。 -
@JerryCoffin 是的,但是 ws 出现在 getline 调用之前
-
@user4581301 我明白你在说什么,我应该先检查它是否为空
-
@MichaelGrinnell:准确地说——所以为了继续调用
getline,用户必须输入一些非空白的内容。调用 getline 时,该非空白字符必须在输入缓冲区中,因此它读取的内容不可能为空。