C语言if-else双输入比较、yes/no实现及scanf跳过输入问题咨询
C语言相关问题解答
问题1:代码无法接收第二个输入的原因及解决方案
原因
- 第一处
scanf ("%i ", &u);的格式化字符串末尾多了多余空格:该空格会强制scanf匹配后续所有空白字符,直到遇到非空白字符才会终止输入读取,会打乱后续输入逻辑。 - 输入年龄后按下的回车符(
\n)会残留在输入缓冲区中,第二个scanf("%c", &ktp)的%c格式化符会读取任意字符(包括空白类的回车符),因此直接把残留的回车符赋值给了ktp,不会等待用户主动输入。 - 额外补充:你代码中两处
printf都多传了地址参数&u、&ktp,printf不需要传入变量地址,属于多余写法。
解决方法
- 删除第一个scanf格式化字符串末尾的空格
- 在第二个scanf的
%c前加一个空格,用于主动跳过输入缓冲区中残留的所有空白字符 - 删掉printf里多余的地址参数
修正后对应代码片段:
printf("Masukkan umur anda : "); scanf ("%i", &u); printf("Apakah anda memiliki ktp (y atau n): "); scanf (" %c", &ktp); // 注意%c前的空格
问题2:C语言实现yes/no选择功能的方法
按照以下步骤实现即可:
- 读取字符前通过
scanf格式化串前加空格的方式,跳过缓冲区残留的空白字符 - 校验用户输入,兼容大小写输入(用户输入大写Y/N也能正常识别)
- 非法输入可以加循环提示用户重新输入,保证逻辑鲁棒
示例代码:
char ktp; while(1) { printf("Apakah anda memiliki ktp (y atau n): "); scanf(" %c", &ktp); if(ktp == 'y' || ktp == 'Y' || ktp == 'n' || ktp == 'N') { break; } printf("输入非法,请输入y/n或Y/N\n"); } // 后续if判断使用即可 if(ktp == 'y' || ktp == 'Y') { // 对应yes的逻辑 } else { // 对应no的逻辑 }
问题3:C语言通过if-else实现两个输入值比较逻辑的方法
首先要保证两个输入值都已正确读取、类型符合预期,之后直接在if的条件表达式中拼接判断规则即可:
- 单个条件直接写判断语句,如
if(u >=17) - 多条件组合用
&&(逻辑与,两个条件同时满足才为真)、||(逻辑或,两个条件满足任意一个就为真)、!(逻辑非,条件取反)拼接 - 多分支判断用
else if依次覆盖所有场景,最后用else处理剩余的异常场景
你原有代码中的判断逻辑就是典型的两个输入值组合判断的实现,逻辑是通顺的,修复输入问题后就能正常运行。
内容的提问来源于stack exchange,提问作者Rey
相关产品推荐
相关产品推荐

