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

如何修复程序:输入非字母字符时避免崩溃并正确统计字母数

问题修复方案

你的代码卡死是因为用同一个变量i既当字母计数器又当字符串索引,遇到空格或非字母字符时,i不递增,导致循环永远卡在同一个字符上,没法走到字符串结束符\0,终端就会无限循环假死。另外i = +0;这种写法完全没用,属于无效操作。

修复后的代码

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

int count_letters(string text);

int main(void)
{
    string text = get_string("text? ");
    int letters = count_letters(text);

    printf("%i letters\n", letters);
}

int count_letters(string text)
{
    int count = 0; // 单独用count统计字母数量
    int i = 0;     // i专门用来遍历字符串索引
    while (text[i] != '\0') // 遍历到字符串结束符为止
    {
        if (isalpha(text[i]))
        {
            count++; // 是字母就计数+1
        }
        i++; // 不管是不是字母,索引都要往后走,避免死循环
    }
    return count;
}

关键改动说明

  • 拆分count和i两个变量,各司其职:count负责统计字母数,i负责遍历字符串的每个字符
  • 每次循环不管当前字符是不是字母,都执行i++,确保能逐步走到字符串末尾的\0,结束循环
  • 简化判断逻辑,不需要单独判断空格或其他字符,只要不是字母就跳过计数即可
  • 修正printf里的换行符,原来的写法会导致输出格式错误,改成\n正常换行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:05:17