解题思路:省流:不要用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++;

    }

}


点赞(2)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论