C++ 如何使用cin实现单行整型命令行输入验证?
我有一个程序,要求用户输入[0,2]范围内的整数。我使用以下链接作为指导 但是,当用户在不输入数据的情况下按enter键时,光标只会转到命令提示符中的下一行,而我更希望它能提示用户输入有效的数字。在这种情况下提示用户是否有意义,或者是否有理由不首先将验证作为单行输入来实现?在字符串的情况下,我会使用getline来解决这个问题,在这种情况下我应该使用它吗?以下是我的代码,基于上述链接:C++ 如何使用cin实现单行整型命令行输入验证?,c++,C++,我有一个程序,要求用户输入[0,2]范围内的整数。我使用以下链接作为指导 但是,当用户在不输入数据的情况下按enter键时,光标只会转到命令提示符中的下一行,而我更希望它能提示用户输入有效的数字。在这种情况下提示用户是否有意义,或者是否有理由不首先将验证作为单行输入来实现?在字符串的情况下,我会使用getline来解决这个问题,在这种情况下我应该使用它吗?以下是我的代码,基于上述链接: #include <iostream> int main() { int answer
#include <iostream>
int main()
{
int answeredNumber;
while(1)
{
std::cout << "Enter your answer: ";
if(std::cin >> answeredNumber && answeredNumber >= 0 && answeredNumber <= 2)
{
break;
}
else
{
std::cout << "Please enter a valid answer: " ;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
system("pause");
}
#包括
int main()
{
国际应答号码;
而(1)
{
std::cout>answeredNumber&&answeredNumber>=0&&answeredNumber这是因为使用cin
获取整数将跳过前导空格,包括换行符。这不是一个简单的方法
如果需要基于行的输入,可以将输入值作为字符串,然后解释:
#include <iostream>
#include <sstream>
#include <string>
int main (void) {
std::string inputLine;
int answer;
std::cout << "Enter your answer: ";
while(1) {
getline (std::cin, inputLine);
std::stringstream ss (inputLine);
if ((ss >> answer))
if ((answer >= 0) && (answer <= 2))
break;
std::cout << "No, please enter a VALID answer: " ;
}
std::cout << "You entered " << answer << '\n';
return 0;
}
#包括
#包括
#包括
内部主(空){
std::字符串输入线;
int答案;
标准::cout>答案)
如果((答案>=0)和&(答案另一个答案指定了问题。但是,我认为对代码稍加修改将解决您眼前的问题:
int answeredNumber = std::cin.get() - '0';
if(answeredNumber >= 0 && answeredNumber <= 2)
int answeredNumber=std::cin.get()-“0”;
如果(answeredNumber>=0&&answeredNumber>运算符接收格式化数据,则需要使用get()
和其他函数来接收未格式化数据。是否get
获取字符,然后将其转换为整数?我认为可能需要将其转换为实值(例如,通过减去“0”)。