解题思路:使用fgets函数替换gets函数,避免缓冲区溢出。使用sscanf函数格式化输入。

注意事项:1.gets函数由于它的不安全已经不在使用,因此使用fgets函数进行替换。

2.在进行多个字符串的输入时,将字符串末的换行符'\n'替换成'\0'。



参考代码:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>


#define MAX_INPUT_SIZE 100


int is_valid_ip(int a, int b, int c, int d) {

    return (a >= 0 && a <= 255) && (b >= 0 && b <= 255) && (c >= 0 && c <= 255) && (d >= 0 && d <= 255);

}


int main() {

    int a, b, c, d;

    char buffer[MAX_INPUT_SIZE];


    // 循环读取每一行输入

    while (fgets(buffer, sizeof(buffer), stdin)) {

        // 去掉输入末尾的换行符

        buffer[strcspn(buffer, "\n")] = '\0';


        // 检查是否为结束标志 "End of file"

        if (strcmp(buffer, "End of file") == 0) {

            return 0;

        }


        // 解析 IP 地址部分

        if (sscanf(buffer, "%d.%d.%d.%d", &a, &b, &c, &d) == 4) {

            // 验证 IP 地址并输出结果

            if (is_valid_ip(a, b, c, d)) {

                printf("Y\n");

            } else {

                printf("N\n");

            }

        } else {

            // 如果解析失败

            printf("N\n");

        }

    }


    return 0;

}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论