测试整数值范围的难度

Difficulty with testing for ranges of integer values

本文关键字:范围 整数 测试      更新时间:2023-10-16

我正在编写过滤器程序分组幼儿园,学前班和学校,我写了我写的,如果有程序,但它输出了错误的条件,谁愿意看我的程序?

#include<iostream>
using namespace std;
int main() {
    int  input;// age
    int kindergarden , preschool , school;
    cin >> input;
    if (2 <= 4)
    {
        cout << "kindergarden" << "nn";
    if (5 <= 6)
    {
        cout << "preschool" << "nn";
    }
    else (7 <= 15);
    {
        cout << "school" << "nn";
    }
    }
}

您的第一个if语句是 if (2 <= 4)。这将永远是正确的。2始终小于4。在该语句中,是另一个if语句,询问5 <= 6是否。这也将永远是正确的。因此,它将输出"幼儿园学前班"。

我假设您要检查输入是否在您的if语句中的两个值之内。为此,您会写

if(2 <= input && input <= 4)

另外,您应该在第一个if语句中带上第二个if语句。为此,您应该将}放在第二个IF语句之前,而不是在最后一个。

之后。

编辑:正如YSC指出的那样,还有另一个问题:else (7 <= 15);。有两个问题:

1(应该是 else if(condition),因为普通的 else语句不期望条件。

2(不应以;结束。它应该以{结尾,以保存如果条件为真,应执行的代码。

您的第一个如果包裹在另外两个方面。因为您使用了源代码的平坦凹痕,所以很难发现。

if (2 <= input && input  <= 4)
{
    cout << "kindergarden" << "nn";
} // here was your mistake
else if (5 <= input && input  <= 6)
{
    cout << "preschool" << "nn";
}
else if (7 <= input && input  <= 15) // ; another mistake
{
    cout << "school" << "nn";
}

您实际上可以以多种方式将其分为一个循环

#include<iostream>
#include<string>
using namespace std;
int main() {
    int  input = 0;// age
    const struct Cat 
    {
        int age;
        string category;
    } classes[] = {  {2, "kindergarden"}, {5, "preschool"}, {7, "school"}, {16, ""} };
    cin >> input;
    // without range loop this looks tricky
    for(const Cat *c = std::end(classes)-1; c >= std::begin(classes); c-- )
        if ( input >= c->age ) 
        {
            std::cout << c-> category;
            break;
        }
}

唯一的优势是一个地方的条件聚集。当然,可能有更多的条件参数,例如上和下括号而不是下括号。

相关文章: