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

C语言中dummy变量的作用:移除后程序为何直接退出?

问题解析:dummy变量的作用及移除后程序异常的原因

原代码

int main ()
{
    char c;
    int choice,dummy;
    do{
    printf("1. Print Hello\n2. Print World\n3. Exit\n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1 :
        printf("Hello\n");
        break;
        case 2:
        printf("World\n");
        break;
        case 3:
        exit(0);
        break;
        default:
        printf("please enter valid choice\n");
    }
    printf("do you want to enter more?");
    scanf("%d",&dummy);
    scanf("%c",&c);
    }while(c=='y');
}

dummy变量的作用

这个dummy变量是用来处理输入缓冲区残留换行符的,但实现逻辑很不合理。

当你用scanf("%d", &choice)输入选项时,输入内容是「数字+回车」,scanf只会读取数字部分,回车对应的换行符\n会留在输入缓冲区里。原代码里的scanf("%d", &dummy)试图通过读取整数的方式跳过这个换行符,但这是错误的处理方式:如果用户输入的不是数字,这行代码会直接失效,反而引发新问题。

移除后程序直接退出的原因

删掉dummy相关代码后,程序执行到scanf("%c", &c)时,会直接读取缓冲区里残留的换行符,把变量c赋值为'\n'。而循环的终止条件是while(c=='y'),'\n'不等于'y',所以循环直接结束,程序也就退出了,根本没给你输入字符的机会。

正确的解决方式

不需要用dummy变量,只需要把读取字符的代码改成scanf(" %c", &c)——注意%c前面的空格,它会自动跳过输入缓冲区里所有空白字符(包括换行、空格、制表符),这样就能正确读取用户输入的y或其他字符了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:05:28