我正在编写过滤程序分组幼儿园,学前班和学校,我写的是程序,但是输出条件不对,谁愿意看看我的程序?
#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";
}
}
}
答案 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;
}
}
唯一的好处是在一个地方聚合条件。当然,条件可以有更多参数,例如上下括号而不是下限。