如何修复程序:输入非字母字符时避免崩溃并正确统计字母数
问题修复方案
你的代码卡死是因为用同一个变量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
相关产品推荐
相关产品推荐

