expected primary expression before '%' token

cqq273452415 2013-05-05 07:40:45
http://acm.hrbeu.edu.cn/index.php?act=problem&id=1001&cid=20

Valid date format

code:
#include<stdio.h>
#include<string.h>
char yuefen[13][5]={"Jan","Feb","Mar","Apr","May","June","July","Aug","Sept","Oct","Nov","Dec"};
int getyue(char a[])
{
int i,yue;
for(i=0;i<12;i++)
{
if(strcmp(a,yuefen[i])==0)
{
yue=i+1;
return yue;
}
}
return -1;
}

int leap(int y)
{
if((y%4==0&&y%100!=0)||(y%400==0))
return 1;
else return 0;
}

int judge(int m,int d,int y)
{
if((y>1000)&&(m==1||m==3||m==5||m==7||m==8||m==10||m==12)&&(d>0&&d<=31))
return 1;
else if((y>1000)&&(m==4||m==6||m==9||m==11)&&(d>0&&d<=30))
return 1;
else if((y>1000)&&leap(y)==1&&m==2&&(d>0&&d<=29))
return 1;
else if((y>1000)&&leap(y)==0&&m==2&&(d>0&&d<=28))
return 1;
else return 0;
}

int main()
{
char str[50],yue[10];
int d,m,y,flag;
while(gets(str))
{
if(str[2]=='-'&&str[5]=='-')
{
sscanf(str,"%d-%d-%d",&m,&d,&y);
if(judge(m,d,y)==1)
printf("%.2d-%.2d-%d\n",m,d,y);
else printf("Invalid\n");
}
else if(str[2]=='-'&&(str[3]>='A'&&str[3]<='S'))
{
sscanf(str,"%d-%[^-]-%d",%d,yue,&y); //明明照着书上敲的 咋编译错误啊
m=getyue(yue);
if(judge(m,d,y)==1)
printf("%.2d-%.2d-%d\n",m,d,y);
else printf("Invalid\n");
}
else if(str[2]=='/'&&str[5]=='/')
{
sscanf(str,"%d/%d/%d",&m,&d,&y);
if(judge(m,d,y)==1)
printf("%.2d-%.2d-%d\n",m,d,y);
else printf("Invalid\n");
}
else if(str[4]=='/'&&str[7]=='/')
{
sscanf(str,"%d/%d/%d",&y,&m,&d);
if(judge(m,d,y)==1)
printf("%.2d-%.2d-%d\n",m,d,y);
else printf("Invalid\n");
}
else if(str[4]=='/'&&(str[5]>='A'&&str[3]<='S'))
{
sscanf(str,"%d/%[^/]/%d",&y,yue,&d);
m=getyue(yue);
if(judge(m,d,y)==1)
printf("%.2d-%.2d-%d\n",m,d,y);
else printf("Invalid\n");
}
else printf("Invalid\n");
}
return 0;
}


额 发现手残打错东西了···
应该是&d····
好吧 请问各位大神%[^-]是什么意思?
以前从来都没见过
...全文
375 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaokai115 2013-05-11
  • 打赏
  • 举报
回复
网上搜的。。。。。 。。。。。。。。。。。。。。。。。。。。。。。。。 但是后来,我需要处理2006:03:18-2006:04:18 仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。 我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。 format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。 %[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。 所以那个问题也就迎刃而解了: sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);
zhaokai115 2013-05-11
  • 打赏
  • 举报
回复
%[^-]没见过,估计是%*的typo吧
buyong 2013-05-11
  • 打赏
  • 举报
回复
sscanf(str,"%d-%[^-]-%d",%d,yue,&y); //明明照着书上敲的 咋编译错误啊 语法错误吧,没见过这种用法。
cqq273452415 2013-05-11
  • 打赏
  • 举报
回复
后面的“并且停止读入,贪婪性”是什么意思啊
qinken547 2013-05-11
  • 打赏
  • 举报
回复
%[^a] 匹配非a的任意字符,并且停止读入,贪婪性
cqq273452415 2013-05-11
  • 打赏
  • 举报
回复
为啥没人··

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧