解题思路:省流:不要用fget函数
注意事项:如果你的代码用了fget函数,你可以在它的在线测试里面运行,然后你就会惊喜地发现答案不对,为什么呢?我问了ai,ai给我的解释是:
fgets 会在缓冲区满或遇到换行符时停止。正常情况下,输入短于 998 字符时,fgets 会保留末尾的换行符 '\n'。
但在某些在线判题系统中,输入可能不包含换行符(例如直接从文件重定向,文件末尾没有换行),此时 fgets 读取的字符串中没有 '\n',循环就会一直继续直到偶然遇到内存中的 '\n' 或越界,导致统计结果完全错误。
参考代码:这是我的50分代码,改成get函数就满了
#include<stdio.h>
void statistic(char* str, int* a, int* b, int* c, int* d);
int main()
{
int a = 0, b = 0, c = 0, d = 0;
char str[999];
fgets(str, sizeof(str), stdin);
statistic(str, &a, &b, &c, &d);
printf("%d %d %d %d", a, b, c, d);
return 0;
}
void statistic(char* str, int* a, int* b, int* c, int* d)
{
int i = 0;
while (str[i] != '\n')
{
if ((str[i] >= 65 && str[i] <= 90) || (str[i] >= 97 && str[i] <= 122))
{
(*a)++;
}
else if (str[i] >= 48 && str[i] <= 57)
{
(*b)++;
}
else if (str[i] == 32)
{
(*c)++;
}
else
{
(*d)++;
}
i++;
}
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复