C++ 所有 Int 对于 if 语句都有效 |如果(选择== 1)

问题描述 投票:0回答:1

我有一些可能很简单的问题:

  1. 为什么每个整数都被接受为 if 语句中的有效输入

  2. 为什么 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;
}
c++ conditional-statements
1个回答
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'
? 再多做一点工作,您就可以消除这种重复。

© www.soinside.com 2019 - 2024. All rights reserved.