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

C语言逐个读取字符到数组异常:连续读取两数组时首字符异常

问题分析与解决

问题根源

输入完第一个数组内容并按下回车时,换行符\n会残留在输入缓冲区中。调用第二个receive_pool_content函数时,第一个scanf("%c")会直接读取这个换行符,而它不是空格,不会触发--i修正,直接存入pool2[0]。后续读取你输入的"q w e r t y"时,只能存入5个有效字符,最终pool2内容变成\nqwert,导致pool2[5]不是预期的y。

解决方案

方案1:手动清空输入缓冲区

在两次函数调用之间,加入代码吃掉缓冲区里的残留换行符:

int main()
{
    char pool1[6];
    char pool2[6];
    receive_pool_content(pool1,6);
    // 清空缓冲区直到遇到换行符
    while(getchar() != '\n');
    receive_pool_content(pool2,6);
    printf("%c", pool2[5]);
    return 0;
}

方案2:优化scanf格式(更推荐)

修改scanf的格式控制符,让它自动跳过所有空白字符(包括空格、换行、制表符):

void receive_pool_content (char pool[], int pool_size)
{
    for (int i=0; i<pool_size; i++)
    {
        // 前面的空格会让scanf自动跳过所有空白字符
        scanf(" %c", &pool[i]);
    }
}

这种方法可以直接去掉原来的if (pool[i]==' ') --i;逻辑,因为scanf会自动跳过输入中的空格,每次循环都能读取到一个有效字符,循环pool_size次刚好填满数组,同时也避免了缓冲区残留换行符的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 16:03:24