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
相关产品推荐
相关产品推荐

