为什么编写的C语言代码输入Y不生效但输入N可正常运行
问题原因
- 变量类型与输入格式完全不匹配:代码中定义
fever为float浮点类型,scanf使用%f格式符用于读取浮点数,但实际需要用户输入的是Y/N类字符。当输入字符时,scanf会匹配失败,不会修改fever的取值,fever会保留未初始化的随机垃圾值,几乎不可能等于'y'对应的ASCII编码值,因此if(fever == 'y')判断永远为假,始终走else分支。 - 输入N看似正常是巧合:N对应的业务逻辑本来就应该进入else分支,不管输入的是Y、N还是其他非浮点数内容,都会触发else分支,只是输入N时刚好和预期结果一致,本质逻辑是错误的。
修复代码
#include <stdio.h> int main(){ char fever; printf("do you have fever? Enter Y or N: "); // 格式符前加空格可过滤前置空白字符,避免读取到残留的换行、空格 scanf(" %c", &fever); if(fever == 'y' || fever == 'Y') { printf("you have symptom\n"); } else { printf("you dont have symptom\n"); } return 0; }
内容的提问来源于stack exchange,提问作者qal
相关产品推荐
相关产品推荐

