在线编译器 C

#include <stdio.h> int suma(char a[]) { int i = 0; while (a[i] != '\n' && a[i] != ' ') { i++; } return i; } int sum(char a[]) { int num=0; int size=suma(a); if(a[0]==a[size-1]){ num++; }return num; } int main() { char a[1001]={"Anna went to kayak school"},c ; int answer = 0,i=0; while((c=getchar())!=EOF){ a[i]=c; i++; } answer=suma(a); // printf("a = '%s'\n", a); // printf("b = '%s'\n", b); printf("%d\n", answer); return 0; }
这段代码试图统计输入中第一个单词的长度,但存在几个问题。函数 `suma` 计算的是从字符串开头到第一个空格或换行符的字符数,而 `sum` 函数检查第一个和最后一个字符是否相同,但 `main` 函数中并没有调用 `sum`。

- 在 `main` 函数中,你从标准输入读取字符存入数组 `a`,但数组初始化为固定字符串 `"Anna went to kayak school"`,随后又被输入覆盖。注意 `while` 循环读取输入时,如果输入超过1000个字符会导致数组越界。
- 函数 `suma` 的循环条件检查 `'\n'` 和 `' '`,但标准输入通常以换行符结束。如果输入中没有空格或换行符(例如只输入一个单词后直接按回车),循环会一直访问数组未初始化的部分,导致未定义行为。
- 变量 `answer` 被赋值为 `suma(a)` 的结果,但 `suma` 返回的是第一个单词的长度,而题目可能要求统计满足某种条件的单词数量。检查一下 `sum` 函数是否应该被调用,以及它的逻辑是否符合你的目标。