解题思路:使用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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复