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

C语言如何实现无限循环,输入非法字符时回到程序开头重新执行?

C程序功能实现方案

核心实现思路

两个需求可直接通过基础C语法落地,无需额外依赖:

  • 无限循环:使用恒真循环结构while(1)包裹输入、判断核心逻辑,程序启动后会持续重复「提示输入-返回出招」的流程
  • 非法输入重提示:修正原有错误的字符判断逻辑,识别到非R/r/P/p/S的输入时,先清空输入缓冲区的残留内容(避免换行、多余输入字符导致下一轮读取出错),再通过流程控制语句跳回循环起始位置重新提示

修改后完整可运行代码

#include <stdio.h>
#include <cs50.h>

int main ()
{
    char c;
    // 外层套恒真循环实现无限运行
    while(1)
    {
        printf("Last choice: ");
        c = getchar();

        // 清空输入缓冲区,丢弃换行及多余输入字符,避免影响下一轮读取
        while(getchar() != '\n');

        // 合法输入分支判断
        if (c == 'R'|| c == 'r')
        {
            printf("Your next move: S\n\n");
        }
        else if (c == 'P' || c == 'p')
        {
            printf("Your next move: R\n\n");
        }
        else if (c == 'S' || c == 's')
        {
            printf("Your next move: P\n\n");
        }
        // 所有非合法字符走非法分支,直接continue跳回循环开头
        else
        {
            printf("Invalid input! Please enter R/r/P/p/S only.\n\n");
            continue;
        }
    }
    return 0;
}

关键改动说明

  • 移除了原代码中逻辑错误的非法字符判断分支:原分支用||连接多个不等判断,该条件永远为真,属于逻辑错误,直接用else承接所有非合法输入场景即可
  • 新增输入缓冲区清空逻辑:用户输入字符按回车后,输入队列里会残留换行符,如果不清理,下一轮getchar()会直接读到残留的换行,被判定为非法输入导致异常
  • 非法分支中使用continue关键字:直接终止本轮循环的后续执行,跳回while(1)的起始位置,重新打印输入提示
  • 每次输出结果后增加换行空行,优化交互可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:16