Online Compiler C

#include <stdio.h> #include <string.h> int main() { int count = 0; char c[1001]; while(scanf("%s",c)==1) { char start = c[0]; int Lon = strlen(c); char last = c[Lon-1]; if(start == last) { count++; } } printf("%d",count); return 0; }
这段代码的功能是:从输入中读取多个单词(以空白字符分隔),统计并输出那些首字母和尾字母相同的单词的数量。

代码逻辑基本正确,但有一个潜在问题需要注意。

- 当输入包含多个单词时,`scanf("%s",c)` 会逐个读取,但输入结束的判断条件需要确认。如果输入末尾有换行符或文件结束符,`scanf` 返回 `EOF`,循环会正确结束。但如果输入是空行,`scanf` 会等待输入,不会出错。
- 主要问题在于:`scanf("%s",c)` 读取单词时,如果单词长度超过1000个字符(包括结尾的 `\0`),会导致数组越界。虽然题目可能限制了长度,但这是一个常见的安全隐患。考虑使用更安全的输入方式,或者确保数组足够大。