You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言if-else双输入比较、yes/no实现及scanf跳过输入问题咨询

C语言相关问题解答

问题1:代码无法接收第二个输入的原因及解决方案

原因

  • 第一处scanf ("%i ", &u);的格式化字符串末尾多了多余空格:该空格会强制scanf匹配后续所有空白字符,直到遇到非空白字符才会终止输入读取,会打乱后续输入逻辑。
  • 输入年龄后按下的回车符(\n)会残留在输入缓冲区中,第二个scanf("%c", &ktp)的%c格式化符会读取任意字符(包括空白类的回车符),因此直接把残留的回车符赋值给了ktp,不会等待用户主动输入。
  • 额外补充:你代码中两处printf都多传了地址参数&u、&ktp,printf不需要传入变量地址,属于多余写法。

解决方法

  1. 删除第一个scanf格式化字符串末尾的空格
  2. 在第二个scanf的%c前加一个空格,用于主动跳过输入缓冲区中残留的所有空白字符
  3. 删掉printf里多余的地址参数

修正后对应代码片段:

printf("Masukkan umur anda : ");
scanf ("%i", &u);

printf("Apakah anda memiliki ktp (y atau n): ");
scanf (" %c", &ktp); // 注意%c前的空格

问题2:C语言实现yes/no选择功能的方法

按照以下步骤实现即可:

  1. 读取字符前通过scanf格式化串前加空格的方式,跳过缓冲区残留的空白字符
  2. 校验用户输入,兼容大小写输入(用户输入大写Y/N也能正常识别)
  3. 非法输入可以加循环提示用户重新输入,保证逻辑鲁棒

示例代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:39:03