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

C语言统计输入'A'、'B'数量程序输入异常问题求助

问题原因
  • scanf 的%c格式符会读取所有ASCII字符,包括输入数字n后按下的换行符、输入内容之间的空格、换行等空白字符,这些都会被算作一次有效读取占用计数。如果每输入1个字符就按一次回车,一次操作会读入「有效字符+回车」两个内容,输入5个字符就占满10次读取额度,自然无法继续输入后续内容。
  • 循环条件写为i<=n,原本要读取n个字符,实际会多执行1次读取,逻辑不符合需求。
  • 字符判断逻辑cr='A'是赋值操作而非相等判断,该表达式永远为真,所有读入的字符都会被计入A的数量,判断逻辑完全错误。
修复方案

修复后参考代码如下:

#include <stdio.h>

int main()
{
    int n, i, a=0, b=0;
    char cr;
    
    scanf("%i", &n);
    getchar(); // 清除输入n后残留在输入缓冲区的换行符
    
    for (i=0; i<n; i++) {
        scanf("%c", &cr);
        // 跳过空白字符,不纳入计数
        if (cr == ' ' || cr == '\n') {
            i--;
            continue;
        }
        if (cr == 'A') {
            a++;
        } else if (cr == 'B') {
            b++;
        }
    }
    
    printf("A-%i\n", a);
    printf("B-%i", b);
    return 0;
}

如果不需要处理空白字符过滤,也可以直接在%c前加空格,让scanf自动跳过所有前置空白字符,代码可以简化为:

#include <stdio.h>

int main()
{
    int n, i, a=0, b=0;
    char cr;
    
    scanf("%i", &n);
    // %c前加空格自动跳过所有空白字符
    for (i=0; i<n; i++) {
        scanf(" %c", &cr);
        if (cr == 'A') {
            a++;
        } else if (cr == 'B') {
            b++;
        }
    }
    
    printf("A-%i\n", a);
    printf("B-%i", b);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:15:03