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

如何让C程序仅接受yes/no输入,非法输入时自动退出?

C程序输入限制解决方案

需求说明

仅允许输入字符'y'(对应yes)或'n'(对应no),输入数字或其他任意字符时,程序直接退出。

原代码问题分析

  • else分支语法错误:else (answer != 'y' && answer != 'n'); 中,else不需要额外条件,末尾的分号会导致后续代码块与else脱离关联。
  • 数字判断逻辑错误:answer == '%d'是错误写法,'%d'是格式化符号,并非实际输入的数字字符。
  • 字母判断逻辑错误:answer <= 'A' || answer <='a'无法正确识别非y/n的字母,逻辑范围混乱。
  • 错误处理分支未覆盖所有非y/n的输入场景。

修正后的代码

#include <stdio.h>

int main(void) {
    char answer;
    // 读取输入字符
    scanf("%c", &answer);

    if (answer == 'y') {
        printf("You Entered: 'y'\n\n");
        printf("your turn\n\n");
    } else if (answer == 'n') {
        printf("You Entered: 'n'\n\n");
        printf("other's turn\n\n");
    } else {
        // 所有非y/n的输入统一处理:提示后退出
        printf("You Entered: '%c'\n", answer);
        printf("You did not enter 'y' or 'n', program now exiting... \n");
        // 直接退出程序,返回非0状态码表示异常退出
        return 1;
    }

    return 0;
}

关键修改点

  • 简化分支逻辑:去掉错误的else条件判断,用else直接捕获所有非y/n的输入。
  • 统一错误处理:所有不符合要求的输入(数字、其他字母、符号等)都进入else分支,提示后直接用return 1退出程序。
  • 优化输出格式:合并重复的换行输出,让代码更简洁。
  • 明确退出状态:异常退出时返回非0值,符合程序退出规范(0表示正常结束,非0表示异常)。

扩展优化(可选)

如果需要忽略输入中的换行符或空白字符,可以把scanf改为:

scanf(" %c", &answer);

注意%c前的空格,它会跳过输入中的所有空白字符(空格、换行、制表符等),确保读取到的是有效输入字符。

内容的提问来源于stack exchange,提问作者toon kev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:00:49