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

C语言编程:使用goto语句实现重复运行时scanf不接收输入问题

问题根因
  • 当你使用scanf("%d")读取整数时,仅会提取输入流中的数字内容,用户输入结束按下回车产生的换行符\n会残留在输入缓冲区中。
  • %c格式符的默认行为是不跳过任何空白字符(包括换行符、空格、制表符),所以后续执行scanf("%c", &looping)时,会直接读取到缓冲区中残留的换行符,不会等待用户主动输入,因此看起来就像这条语句被忽略了。
修复方案

最简单的修复方式是在读取字符的%c前添加一个空格,修改对应scanf语句为:

scanf(" %c", &looping);

格式符前的空格会指示scanf自动跳过输入流中所有前置的空白字符,就能正常读取用户输入的Y/N字符了。

你也可以选择在每次读取完整数后,手动清空输入缓冲区,避免残留内容干扰后续输入:

// 放在第二个scanf("%d", &num2);之后执行
while (getchar() != '\n');
修复后完整代码
#include <stdio.h>

int main()
{
    int num1, num2;
    char looping;

AGAIN:
    printf("ENTER FIRST NUMBER FOR ADDITION\n");
    scanf("%d", &num1);

    printf("ENTER SECOND NUMBER FOR ADDITION\n");
    scanf("%d", &num2);

    printf("ADDITION OF TWO NUMBERS IS %d\n", num1 + num2);

    printf("DO YOU WANT TO RUN LOOP AGAIN ?\nENTER Y FOR YES AND N FOR NO\n");
    // 格式符前加空格跳过前置空白字符
    scanf(" %c", &looping);

    if (looping == 'Y' || looping == 'y')
    {
        goto AGAIN;
    }
    else
    {
        goto EXIT;
    }

EXIT:
    printf("EXITING");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:03