解题思路:

1、sscanf 和 scanf 类似,只不过sscanf是从给定的源读取数据,scanf 是从stdin读取数据。

2、int sscanf(const char *buffer, const char *format, [ argument ] ...   ); 

        sscanf会使用指定的格式获取参数。返回获取到的参数个数。
注意事项:

参考代码:

#include<stdio.h>
#include<stdlib.h>

#define JUDGE(n) (n>=0 && n<= 255)?1:0

int main(void)
{
	char IP[16];
	int a, b, c, d;
	while(scanf("%s", IP) != EOF)
	{
	        //IP地址按如下格式获取应该获取到4个值,否则不是IP。
		if(sscanf(IP, "%d.%d.%d.%d", &a, &b, &c, &d) == 4)
		{
			if(JUDGE(a) && JUDGE(b) && JUDGE(c) && JUDGE(d))
			{
				printf("Y\n");
			}
			else
			{
				printf("N\n");
			}
		}
		else
		{
			printf("N\n");
		}
	}
	return 0;
}


点赞(14)
 

0.0分

9 人评分

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

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

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

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

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

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

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

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

评论列表 共有 8 条评论

小小路 5年前 回复TA
鬼才
pingfan443 5年前 回复TA
换家,喷不起来!
麦客 5年前 回复TA
受教了,头一次读到sscanf。
小欢喜 5年前 回复TA
鬼才,就服你
wanderer丶 5年前 回复TA
@学习是为了生存 题目说不考虑前导
零K沁雪 5年前 回复TA
@ZJ666 sscanf 返回的是获取到指定类型数据的个数,在本例中返回值可能是 0,1,2,3,4 。非0即为真。但是只有返回4的时候才是我们需要的结果
ZJ666 5年前 回复TA
sscanf(IP, "%d.%d.%d.%d", &a, &b, &c, &d)这里如果不加==4那么输入字母的时候就判断不了,为什么啊
学习是为了生存 6年前 回复TA
前导0的情况呢
09