解题思路:说好的输入"End of file"结束,弄的我交了好几遍都是超出限制。
其实还是~Z结束。
注意事项:
学多点函数才是解题的好帮手。
函数sscanf()和scanf()类似, 只是输入从buffer(缓冲区)中读取。
例如scanf输入x[100],用sscanf就可以读取x[100]的内容
#include <stdio.h>
#include <string.h>
#define p(n) (n>=0 && n<=255) //定义带参数的宏
int main()
{
char x[1000];
int a,b,c,d;
while(gets(x)!='\0') //这里面和scanf("%s",x)!=EOF是一个原理。
{
if(sscanf(x,"%d.%d.%d.%d",&a,&b,&c,&d)==4)
//判断格式,例如 ?.1.2.3 返回0: 1.?.2.3 返回1; 1.2.3.4 返回4;
printf("%c\n",(p(a) && p(b) && p(c) && p(d))?'Y':'N');
//条件运算符 ? : 例如 1<2?1:2 条件成立选前面就是1,条件不成立就选后面就是2。
else
printf("%c\n",'N');
}
}
0.0分
0 人评分
我在DVC上测试发现还是有漏洞的,比如:2.2.2.2. 改了下 #include <stdio.h> #include <string.h> #define p(n) (n>=0 && n<=255) int fun(char a[]) { char *p=a; int i=0; while(*p) { if(*p=='.')i++; p++; } if(i==3)return 0; return 1; } int main() { char x[1000]; int a,b,c,d; while(scanf("%s",x)!=EOF) { if(fun(x))printf("N\n"); else if(sscanf(x,"%d.%d.%d.%d",&a,&b,&c,&d)==4) printf("%c\n",(p(a)&&p(b)&&p(c)&&p(d))?'Y':'N'); else printf("N\n"); } return 0; }
简单的a+b (C语言代码)浏览:765 |
钟神赛车 (C++代码)浏览:905 |
C语言训练-排序问题<2> (C++代码)浏览:935 |
回文串 (C语言代码)浏览:3095 |
C语言程序设计教程(第三版)课后习题1.5 (C++代码)浏览:778 |
最长单词 (C语言代码)浏览:1474 |
简单的a+b (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:565 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:438 |
printf基础练习 (C语言代码)浏览:2268 |
君应怜 2019-03-15 20:15:55 |
还是有漏洞,没法判断前导0