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

C语言循环输入选择问题:需持续询问至用户输入'n'终止

C语言循环询问y/n输入的问题修复

你的代码存在几个关键问题,导致输入'y'后程序直接终止,以下是问题分析和修复方案:

问题点梳理

  1. scanf参数错误:scanf("%c", choice);中没有传入变量的地址,scanf需要通过指针来修改变量的值,直接传choice会导致内存访问错误,引发未定义行为。
  2. 输入缓冲区残留换行符:输入字符后按下回车,输入流中会保留'\n'(换行符),如果不处理,下一次scanf会直接读取这个换行符,导致逻辑判断异常。
  3. 不必要的exit(1):输入'n'时循环会自然终止,无需调用exit强制退出,且exit(1)通常用于表示程序异常退出,不符合这里的正常终止场景。
  4. 非标准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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:32:39