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

如何修改C语言代码,按要求统计'_'和'!'的出现频率?

解决符号频率统计问题的正确实现与常见坑点

看起来你卡在统计下划线和感叹号频率的问题上了,别着急,我帮你捋捋容易踩的坑,再给你一份符合要求的可运行代码:

#include <stdio.h>

// 假设这是你要求不能修改的函数原型(如果你的原型参数不同,只保留函数名和参数部分即可)
void countSymbolFrequency(void) {
    int underscore_cnt = 0;
    int exclamation_cnt = 0;
    int input_char; // 必须用int类型存储getchar()的返回值!

    printf("请输入需要统计的句子:");
    // 循环读取字符,直到用户输入结束(Windows按Ctrl+Z,Linux/macOS按Ctrl+D)
    while ((input_char = getchar()) != EOF) {
        if (input_char == '_') {
            underscore_cnt++;
        } else if (input_char == '!') {
            exclamation_cnt++;
        }
        // 如果希望输入一行后按回车结束,替换成下面的逻辑:
        // if (input_char == '\n') {
        //     break;
        // }
    }

    printf("下划线'_'的出现次数:%d\n", underscore_cnt);
    printf("感叹号'!'的出现次数:%d\n", exclamation_cnt);
}

int main() {
    countSymbolFrequency();
    return 0;
}

你大概率踩过的几个坑:

  • 错误的变量类型:很多人会把input_char定义成char,但getchar()返回的是int类型(因为要包含代表输入结束的EOF,值为-1)。如果char是无符号类型,-1会被转换成255,导致循环永远不会终止,必须用int来存储。
  • 计数器未初始化:如果不给underscore_cnt和exclamation_cnt赋初始值0,它们会保留内存里的随机垃圾值,统计结果完全错误。
  • 循环条件的优先级陷阱:千万别写成while (input_char = getchar() != EOF)——!=的优先级比=高,这行代码会先判断getchar() != EOF,然后把布尔值(0或1)赋值给input_char,直接丢失了真正的输入字符,必须加括号(input_char = getchar()) != EOF。
  • 输入结束的判断逻辑:如果你的需求是输入一行就停止(而不是等待EOF),可以在循环里判断input_char == '\n'时执行break,这样用户按回车就结束输入。

测试你给的示例输入_Hi_there!!!,运行后会输出下划线2次,感叹号3次,完全符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:20:03