C语言如何实现持续提问直到输入满足Y/N大小写的合法条件
代码存在两个核心错误:
- 变量重复声明:你在
main函数开头已经声明了char answer,又在do循环内部重新声明了一个同名的局部变量,循环外声明的变量从未被赋值,while判断的是未初始化的垃圾值,逻辑完全失效。 - 循环终止条件逻辑错误:你使用了逻辑或
||,这个条件永远为真——比如输入'y'时,answer != 'n'的条件会成立,循环永远不会终止。应该改用逻辑与&&,只要不是四个合法值之一就继续循环。
修正后的可运行代码:
#include <cs50.h> #include <stdio.h> int main(void) { char answer; do { answer = get_char("Are you okay? Y/N: "); if (answer == 'y' || answer == 'Y') { printf("you are okay\n"); } else if (answer == 'n' || answer == 'N') { printf("you are not okay\n"); } } while(answer != 'y' && answer != 'Y' && answer != 'n' && answer != 'N'); }
可选优化写法
可以引入<ctype.h>库的tolower函数将输入统一转为小写后判断,简化条件逻辑:
#include <cs50.h> #include <stdio.h> #include <ctype.h> int main(void) { char answer; do { answer = tolower(get_char("Are you okay? Y/N: ")); if (answer == 'y') { printf("you are okay\n"); } else if (answer == 'n') { printf("you are not okay\n"); } } while(answer != 'y' && answer != 'n'); }
内容的提问来源于stack exchange,提问作者Fkhadim123
相关产品推荐
相关产品推荐

