测试整数值范围的难度

时间:2018-03-30 07:18:11

标签: c++

我正在编写过滤程序分组幼儿园,学前班和学校,我写的是程序,但是输出条件不对,谁愿意看看我的程序?

#include<iostream>
using namespace std;

int main() {

    int  input;// age
    int kindergarden , preschool , school;
    cin >> input;

    if (2 <= 4)
    {
        cout << "kindergarden" << "\n\n";

    if (5 <= 6)
    {
        cout << "preschool" << "\n\n";
    }

    else (7 <= 15);
    {
        cout << "school" << "\n\n";
    }
    }
}

2 个答案:

答案 0 :(得分:4)

您的第一个if语句是if (2 <= 4)。这将永远是真的。 2总是小于4.在if语句中,是另一个if语句,询问是否5 <= 6。这也总是如此。因此,它将输出“幼儿园学前班”。

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

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

此外,您应该将第二个if语句置于第一个之外。为此,您应该将}放在第二个if语句之前,而不是在最后一个之后。

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

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

2)它不应以;结尾。它应以{结束,以保存条件为真时应执行的代码。

答案 1 :(得分:1)

你的第一个if包裹着另外两个人。因为您使用了源代码的扁平缩进,所以很难发现。

if (2 <= input && input  <= 4)
{
    cout << "kindergarden" << "\n\n";
} // here was your mistake

else if (5 <= input && input  <= 6)
{
    cout << "preschool" << "\n\n";
}

else if (7 <= input && input  <= 15) // ; another mistake
{
    cout << "school" << "\n\n";
}

你可以用不同的方式将它变成一个循环

#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;
        }
}

唯一的好处是在一个地方聚合条件。当然,条件可以有更多参数,例如上下括号而不是下限。