C语言程序循环退出异常:输入'n'需两次操作才能终止
C语言程序终止时需两次输入的问题解决
问题分析
核心问题是main函数中多余调用了一次usercont():
eval_poly()的循环内部已经通过usercont()完成了"是否继续计算"的判断,当用户输入'n'时,循环会break,函数正常结束。- 但main函数在
eval_poly()执行完毕后,又额外调用了一次usercont(),导致程序会再次弹出询问,必须再输入一次才能走到system("pause"),这就是需要两次输入才能终止的根本原因。
另外,usercont()的输入处理逻辑存在小瑕疵:当前代码仅跳过换行和EOF,若用户输入多字符(比如"ny"),残留字符会留在输入缓冲区,可能干扰后续操作,但这不是当前的主要问题。
修复方案
1. 移除main函数中的多余usercont()调用
修改后的main函数(补充缺失的函数头):
int main() { getpoly(); eval_poly(); system("pause"); return 0; }
2. 优化usercont()的输入处理(可选)
为避免用户输入后的残留换行/多余字符干扰后续操作,在读取有效选择后清理输入缓冲区:
char usercont() { char y_n; printf("\nWould you like to solve another? Enter 'y' for yes or 'n' for no: "); // 跳过开头的空白字符(换行、空格、制表符) while ((y_n = getchar()) == '\n' || y_n == ' ' || y_n == '\t'); // 清理当前输入行剩余的所有字符 int c; while ((c = getchar()) != '\n' && c != EOF); return y_n; }
3. 修正eval_poly()的返回值问题
当前eval_poly()声明返回double但未写return语句,属于未定义行为,建议改为无返回值类型:
void eval_poly() { // 原函数逻辑不变 }
验证效果
修改完成后,当在eval_poly()的询问中输入'n',程序会直接退出循环、结束eval_poly(),随后执行system("pause"),无需额外输入即可正常终止。
内容的提问来源于stack exchange,提问作者Spongebuild
相关产品推荐
相关产品推荐

