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

10字符类型统计程序中回车被误计为空格的问题求助

问题分析与解决方案

问题根源

  1. 换行符的系统差异:Windows系统中回车输入对应\r\n两个字符,Linux/macOS则对应\n。你的代码仅判断了\r,但实际输入的换行字符可能是\n,导致被后续的isspace分支捕获统计为空格。
  2. isspace()的匹配范围:C标准中isspace()会将空格' '、换行'\n'、回车'\r'、制表符等都视为空白字符,你的判断逻辑中未排除\n,导致换行被统计为空格。

修改后的代码

#include <stdio.h>
#include <ctype.h>

int main() {
    char c;
    int count_alph = 0, count_spaces = 0, count_creturns = 0, count_digit = 0, count_other = 0;

    printf("Enter input characters: \n");

    for (int i = 0; i < 10; i++) {
        c = getchar();
        if (isalpha(c)) {
            count_alph++;
        } else if (c == '\r' || c == '\n') { // 兼容不同系统的换行/回车字符
            count_creturns++;
        } else if (isspace(c)) { // 仅统计空格、制表符等非回车换行的空白字符
            count_spaces++;
        } else if (isdigit(c)) {
            count_digit++;
        } else {
            count_other++;
        }
    }

    printf("Number of English letters: %d\n", count_alph);
    printf("Number of Spaces: %d\n", count_spaces);
    printf("Number of Carriage returns/Line feeds: %d\n", count_creturns);
    printf("Number of Numerical characters: %d\n", count_digit);
    printf("Number of other characters: %d\n", count_other);

    return 0;
}

关键修改说明

  • 优先判断\r和\n,将两类换行相关字符统一统计为回车计数(若需严格区分,可拆分判断分支)。
  • 调整isspace分支的逻辑,此时该分支仅处理空格、制表符等非回车换行的空白字符,避免混淆统计。
  • 注意:Windows下输入一次回车会产生\r\n两个字符,会占用两次循环计数,若需将其视为单个回车统计,需额外添加逻辑跳过后续的\n(比如在捕获\r后,手动调用一次getchar()并跳过计数,但需注意循环次数的调整)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:15:08