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 sum(char a[]) { int size=suma(a); if(a[0]==a[size-1]){ return 1; }return 0; } 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; }
这段代码试图统计输入字符串中单词的数量,但存在几个问题。

首先,`suma` 函数被调用了两次,一次在 `sum` 函数中只传了一个参数,另一次在 `main` 中传了两个参数。`sum` 函数里的调用 `suma(a)` 缺少第二个参数,会导致编译错误。

其次,`suma` 函数在遇到空格时会把当前单词长度存入 `res` 数组,但最后一行 `res[++count_save]=count` 使用了前置自增,导致第一个存储位置被跳过,而且返回的 `count_save` 比实际单词数多1。

另外,`sum` 函数试图比较第一个和最后一个字符是否相同,但这里的逻辑与单词计数无关,可能是遗留代码。

- 检查 `sum` 函数中调用 `suma` 时是否缺少了必要的参数,以及这个函数是否真的需要。
- 注意 `suma` 函数中 `res[++count_save]=count` 这一行,前置自增会让数组索引从1开始而不是0,思考如何正确存储最后一个单词的长度并返回正确的单词数量。