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

C语言读取字符输入时for循环执行次数少于预期问题求解

问题根因

  • 首次执行scanf("%d", &n)读取次数值后,输入缓冲区会残留输入完成后按下的换行符
  • 循环内的%c格式符不会自动跳过空白字符,会直接把残留的换行符读取为c变量的值,导致本次循环的输入匹配逻辑不生效,最终看起来循环接收输入的次数少于设定值
  • 单次getchar()只能吃掉一个残留字符,如果输入n后存在多个空白字符(比如多余的空格、连续换行),依然无法解决问题

修复代码

int main(void)
{
    struct node *head = NULL;
    int n;
    char c;
    int k;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        // %c前加空格,自动跳过所有前置空白字符(换行、空格、制表符等)
        scanf(" %c %d", &c, &k);
        if (c == 'a')
        {
            head = add(k, head);
        }
        else if (c == 'd')
        {
            head = del(k, head);
        }
    }
    printstruct(head);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:04