提问人:brickleygee 提问时间:2/12/2023 最后编辑:James Risnerbrickleygee 更新时间:2/12/2023 访问量:120
如何检查输入的有效性?-C++
How to check for input validity? - C++
问:
srand(time(0));
int rolls, x;
string input;
die *d;
die header1;
cout << "Please enter the number of dies to use (4, 5, or 6) or press enter to default to 6 dies: ";
getline(cin, input);
if (input.empty())
{
// 6 dies by default
x = 6;
}
else if (input != "4" && input != "5" && input != "6" && !(cin.get() == '\n'))
{
while (input != "4" && input != "5" && input != "6") {
cout << "INVALID Input: ";
getline(cin, input);
}
}
else
x = stoi(input);
我不明白为什么循环不会退出。用户只需输入 4、5、6 和 ENTER 键即可获得默认值 6。我检查了他们是否只是在第一次尝试时按了 ENTER 键,但如果他们按了其他东西,比如 2 或其他任何东西,它会说输入无效。不过,在while循环中,只要他们输入4,5,6和ENTER键,它就应该退出吧?它不仅会不断循环,而且当我将 cin.get() 条件添加到 while 循环中时,它似乎甚至在再次重复循环之前期待用户输入。我是否错误地使用 cin.get() 来检查用户输入空虚?
答:
2赞
PaulMcKenzie
2/12/2023
#1
可以重写输入以使用外部循环,该循环继续循环,直到输入可接受为止。那么就没有必要使用/误用了:while
cin::get
#include <iostream>
#include <string>
int main()
{
std::string input;
// loop until the input is good
while (true)
{
std::cout << "Please enter the number of dies to use (4, 5, or 6) or press enter to default to 6 dies: ";
std::getline(std::cin, input);
// something was entered
if (!input.empty())
{
// check for 4, 5, or 6 being entered
if (input == "4" || input == "5" || input == "6")
break; // get out of input loop
else
// input entered is no good
std::cout << "\nINVALID Input: " << input << ". Please try again:\n\n";
}
else // nothing was entered
{
input = "6";
break; // get out of input loop
}
}
std::cout << "\nSuccess: Your input was: " << input;
}
请注意,类似的东西不会被视为有效,因为有一个尾随空格。如果您需要修剪任何多余的空间,那是另一个问题。4
评论
cin.get()
input
cin.get() != '\n'
!(cin.get() == '\n')