如果我为x输入值205,该功能应该打印出“第一个四边形”但是当我测试我的功能时,它打印出“第一个四边形”和“不确定”。我无法弄清楚为什么,感谢任何帮助!
void checkRoom(int x) {
if ((x >= 203) || (x <= 216)) {
printf("first quad\n");
}
if ((x >=217) || (x <= 229)) {
printf("second quad\n");
}
if ((x >=232) || (x <= 238)) {
printf("CSL\n");
}
if ((x >= 246) || (x <= 257)) {
printf("classroom wing\n");
}
else {
printf("not sure\n");
}
}
答案 0 :(得分:2)
由于else
仅与最后if
绑定,因此您需要的是else if
。并且您的测试条件应使用&&
而不是||
。
void checkRoom(int x) {
if ((x >= 203) && (x <= 216)) {
printf("first quad\n");
}
else if ((x >=217) && (x <= 229)) {
printf("second quad\n");
}
else if ((x >=232) && (x <= 238)) {
printf("CSL\n");
}
else if ((x >= 246) && (x <= 257)) {
printf("classroom wing\n");
}
else {
printf("not sure\n");
}
}
答案 1 :(得分:1)
您的布尔表达式不正确。范围包含需要&&
,而不是||
。
else
子句仅适用于最新 if
语句;如果你想只运行较早的if
语句,如果之前没有成功,那么你需要将它们放在自己的else
条款中。
答案 2 :(得分:0)
如果绝对不能使用“else if”,请尝试以下三种方法之一:
在条件匹配时设置标志并在结束时测试条件。
void checkRoom(int x) {
int printed = 0;
if ((x >= 203) && (x <= 216)) {
puts("first quad");
printed = 1;
}
if ((x >= 217) && (x <= 229)) {
puts("second quad");
printed = 1;
}
if ((x >=232) && (x <= 238)) {
puts("CSL");
printed = 1;
}
if ((x >= 246) && (x <= 257)) {
puts("classroom wing");
printed = 1;
}
if (printed == 0) {
puts("not sure");
}
}
打印后返回,因此您不会继续执行决策树。
void checkRoomOption2(int x) {
if ((x >= 203) && (x <= 216)) {
puts("first quad");
return;
}
if ((x >= 217) && (x <= 229)) {
puts("second quad");
return;
}
if ((x >=232) && (x <= 238)) {
puts("CSL");
return;
}
if ((x >= 246) && (x <= 257)) {
puts("classroom wing");
return;
}
puts("not sure");
}
将返回值设置为“不确定”,然后在匹配
时覆盖它void checkRoomOption3(int x) {
// you can only do this with a pointer if all the strings are literal strings
// because then they have static storage and no memory needs to be allocated
const char *r = "not sure";
if ((x >= 203) && (x <= 216)) {
r = "first quad";
}
if ((x >= 217) && (x <= 229)) {
r = "second quad";
}
if ((x >=232) && (x <= 238)) {
r = "CSL";
}
if ((x >= 246) && (x <= 257)) {
r = "classroom wing";
}
puts(r);
}
答案 3 :(得分:0)
如果您不想使用'else if',那么您可能需要提供标志来检查其他情况 可能性1
void checkRoom(int x)
{
if ((x >= 203) && (x <= 216))
{
printf("first quad\n");
flag=1;
}
if ((x >=217) && (x <= 229))
{
printf("second quad\n");
flag=1;
}
if ((x >=232) && (x <= 238))
{
printf("CSL\n");
flag=1;
}
if ((x >= 246) && (x <= 257))
{
printf("classroom wing\n");
flag=1 ;
}
else if(flag !=1)
{
printf("not sure\n");
}
}
可能性2
使用Switch case。