我有一些可能很简单的问题:
为什么每个整数都被接受为 if 语句中的有效输入
为什么 if 语句后面的代码没有被执行
#include <iostream>
#include <limits>
int main(){
int choice;
std::cout << "Enter the number 1" <<'\n';
while (!(std::cin >> choice)){
if(choice == 1) {
std::cout << "good" << '\n';
break;
}
else{
std::cout << "bad" << '\n';
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "enter the number 1!"<< '\n';
}
}
return 0;
}
封闭的
while
确保仅在输入不是有效整数时才进入循环。 while
主体内的代码似乎混淆了这一点。 if
条件假设输入足够有效,可以测试 1 性。这几乎适用于现代 C++,因为 choice
将被设置为 0,而永远不会为 1。如果它不是 1,则会清除错误输入并重试。但是,一旦用户输入有效整数,就永远不会进入循环,并且不会测试有效输入的 1 性。
这是用额外的函数来分割事物的情况
int get_int(std::istream & in)
{
int choice;
while (!(in >> choice)) // stau in the loop until the user provides a good value
{
std::cout << "bad" << '\n';
in.clear();
in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout << "enter the number 1!"<< '\n';
}
return choice; // return the good value
}
使代码非常容易编写。在用户输入有效的
int
之前,上述功能不会退出。那么 main 可以是一个简单的循环,调用 get_int
并检查 1-ness。
int main(){
std::cout << "Enter the number 1" <<'\n';
while (get_int(std::cin) != 1){
std::cout << "bad" << '\n';
std::cout << "enter the number 1!"<< '\n';
}
std::cout << "good" << '\n';
}
请注意,这很简单,但有点恶心。看看我们重复了多少次
std::cout << "enter the number 1!"<< '\n'
? 再多做一点工作,您就可以消除这种重复。