C语言条件语句异常:部分变量越界时仍输出成功提示
问题分析
你的代码问题出在Delicious!的输出逻辑上——它属于thyme变量的条件分支,只要thyme在合规范围内,不管其他变量是否越界,这个else分支都会执行。这就导致当部分变量越界但thyme合规时,会同时输出错误提示和Delicious!。
修正方案
添加一个标志变量来跟踪所有变量是否都处于合规范围,最后统一判断是否输出Delicious!:
#include <stdio.h> int main() { float salt, pepper, garlic, thyme; // 标志变量:1表示全部合规,0表示存在越界变量 int is_delicious = 1; printf("Lets cook!\n"); printf("====================\n"); printf("\n"); printf("Amount of salt added? "); scanf("%f", &salt); printf("Amount of pepper added? "); scanf("%f", &pepper); printf("Amount of garlic added? "); scanf("%f", &garlic); printf("Amount of thyme added? "); scanf("%f", &thyme); if (pepper < 1.5) { printf("Needs more pepper\n"); is_delicious = 0; } else if(pepper > 3.5) { printf("Too much pepper!\n"); is_delicious = 0; } if(salt <5.5) { printf("Needs more salt\n"); is_delicious = 0; } else if(salt > 13) { printf("Too salty!\n"); is_delicious = 0; } if (garlic < 2) { printf("Needs more garlic\n"); is_delicious = 0; } else if(garlic > 4) { printf("Too much garlic!\n"); is_delicious = 0; } if (thyme < 0.5) { printf("Needs more thyme\n"); is_delicious = 0; } else if(thyme > 1.25) { printf("Too much thyme!\n"); is_delicious = 0; } // 所有变量检查完成后,统一判断是否输出Delicious if (is_delicious) { printf("Delicious!\n"); } return 0; }
关键改动说明
- 新增
int is_delicious = 1;:初始假设所有变量都合规 - 每个变量越界的分支中,添加
is_delicious = 0;:只要有一个变量越界,就将标志置为0 - 移除原thyme分支的
else,改为最后统一判断标志变量:只有当所有变量都合规(标志为1)时,才输出Delicious!
测试验证
- 部分变量越界(salt=15、pepper=5、garlic=3、thyme=1):输出
Too much pepper!\nToo salty!,不再输出Delicious! - 全部变量越界:仅输出各越界提示
- 全部合规:输出
Delicious!
内容的提问来源于stack exchange,提问作者Amburkins
相关产品推荐
相关产品推荐

