C语言循环输入选择问题:需持续询问至用户输入'n'终止
C语言循环询问y/n输入的问题修复
你的代码存在几个关键问题,导致输入'y'后程序直接终止,以下是问题分析和修复方案:
问题点梳理
scanf参数错误:scanf("%c", choice);中没有传入变量的地址,scanf需要通过指针来修改变量的值,直接传choice会导致内存访问错误,引发未定义行为。- 输入缓冲区残留换行符:输入字符后按下回车,输入流中会保留
'\n'(换行符),如果不处理,下一次scanf会直接读取这个换行符,导致逻辑判断异常。 - 不必要的
exit(1):输入'n'时循环会自然终止,无需调用exit强制退出,且exit(1)通常用于表示程序异常退出,不符合这里的正常终止场景。 - 非标准
main函数:void main()不符合C语言标准,标准定义应为int main()并返回状态码。
修复后的代码
#include <stdio.h> int main() { char choice = 'y'; while(choice != 'n') { printf("Enter choice(y/n):-\n"); // 空格跳过空白字符,传入变量地址确保输入正确存储 scanf(" %c", &choice); if(choice == 'y') { printf("Choice = y\n"); } else if (choice == 'n') { printf("Choice = n\n"); } else { printf("Invalid input, please enter y or n\n"); } } return 0; }
关键修改说明
- 修正
scanf参数为&choice,确保输入能正确写入变量。 - 在
scanf格式字符串前添加空格" %c",自动跳过输入缓冲区中的空白字符(换行、空格等),避免读取无效字符。 - 替换
void main()为标准的int main(),并添加return 0;符合C语言规范。 - 移除
exit(1),让程序通过循环条件自然终止。 - 增加非法输入处理分支,提示用户输入正确的选项。
测试输出(符合期望)
Enter choice(y/n):- y Choice = y Enter choice(y/n):- y Choice = y Enter choice(y/n):- n Choice = n (Program execution terminated)
内容的提问来源于stack exchange,提问作者CKJ_1630
相关产品推荐
相关产品推荐

