Online Compiler C

#include <stdio.h> int suma(char a[],int res[]) { int i = 0,count_save=0,count=0; while(a[i] != '\n' && a[i] != '\0') { if(a[i]==' '){ res[count_save]=count; count=0; count_save++; }else count++; i++; }res[++count_save]=count; return count_save; } int main() { char a[1001]={"Anna went to kayak school"},c ; int res[1001]; int answer = 0,i=0; while((c=getchar())!=EOF){ a[i]=c; i++; } answer=suma(a,res); printf("%d\n", answer); return 0; }
这段代码的功能是统计输入文本中单词的长度,并将每个单词的长度存入数组 `res`,最后返回单词的总数。代码从标准输入读取字符直到 EOF,存入数组 `a`,然后调用 `suma` 函数处理。

代码中存在几个问题:

- 在 `suma` 函数中,当遇到空格时,将当前单词长度存入 `res`,但最后一行 `res[++count_save]=count` 使用了前置自增,这会导致数组索引从 1 开始,而第一个单词的长度被存在 `res[0]`,最后一个单词的长度被存在 `res[count_save+1]`,造成数组索引不一致。

- 在 `main` 函数中,读取输入时没有处理换行符 `\n`,而 `suma` 函数中循环条件检查了 `\n`,这可能导致输入中的换行符被当作普通字符处理,影响单词计数。

- 数组 `a` 在定义时初始化为一个字符串,但随后又被 `getchar` 循环覆盖,初始化的字符串没有实际作用。