问题是求某一天在该年中第几天,输入1996/5/20这种中间有/的数据,下面我写的程序如果只输入数据可以运行出来,但是加上在数中加上/就不行了,求解。。。。。。

lalalallalalalala 2015-07-24 05:50:35
#include<stdio.h>

int isrunnian(int year)
{
scanf("%d",&year);
if(year%400==0||(year%4==0)&&(year%100!=0))
return 1;
else
return 0;
}
int main()
{
int year,month,day;
while(scanf("%d%d%d",&year,&month,&day)!=EOF)
{
int i,total=0;
for(i=1;i<month;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
total+=31;
else if(i==4||i==6||i==9||i==11)
total+=30;
else if(i==2)
{
if(isrunnian(year))
total+=29;
else
total+=28;
}
}
total+=day;
printf("%d\n",total);
}
return 0;
}
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chris君 2015-07-25
  • 打赏
  • 举报
回复
当然不行,你既然指定了参数为%d,那自然就默认你输入的是int型的数据。1996是int,5是int,1991/是什么鬼?只能是char*咯 个人建议你要麽就直接把输入的字符按照%s处理。
lalalallalalalala 2015-07-24
  • 打赏
  • 举报
回复
引用 4 楼 wanggaofengwz的回复:
scanf("%d/%d/%d",&year,&month,&day) 可以这样用吗,应该把输入作为一个字符串去处理,写一个函数来处理那个字符串
能举个例子吗?不会写那个字符串处理函数,初学acm各种不会︶︿︶
wanggaofengwz 2015-07-24
  • 打赏
  • 举报
回复
scanf("%d/%d/%d",&year,&month,&day) 可以这样用吗,应该把输入作为一个字符串去处理,写一个函数来处理那个字符串
赵4老师 2015-07-24
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
#include <string.h>
#include <time.h>
struct tm st;
time_t tt;
char timstr[40];
char tmpbuf[128];
char c;
int t;
int AP() {
    if ('P'==c || 'p'==c) {st.tm_hour+=12;return 1;}
    if ('A'==c || 'a'==c)                 return 1;
                                          return 0;
}
int dtparse() {
    if (7==sscanf(timstr,"%d/%d/%4d %d:%d:%d %c",&st.tm_mday,&st.tm_mon ,&st.tm_year,&st.tm_hour,&st.tm_min,&st.tm_sec,&c)) if (AP()) goto STEP2;
    if (6==sscanf(timstr,"%d/%d/%4d %d:%d%c"    ,&st.tm_mday,&st.tm_mon ,&st.tm_year,&st.tm_hour,&st.tm_min           ,&c)) if (AP()) goto STEP1;
    if (6==sscanf(timstr,"%4d/%d/%d %d:%d %c"   ,&st.tm_year,&st.tm_mon ,&st.tm_mday,&st.tm_hour,&st.tm_min           ,&c)) if (AP()) goto STEP1;
    if (5==sscanf(timstr,"%d.%d.%4d %d:%d"      ,&st.tm_mon ,&st.tm_mday,&st.tm_year,&st.tm_hour,&st.tm_min              ))           goto STEP1;
    if (6==sscanf(timstr,"%4d-%d-%d %d:%d:%d"   ,&st.tm_year,&st.tm_mon ,&st.tm_mday,&st.tm_hour,&st.tm_min,&st.tm_sec   ))           goto STEP2;
STEP1:
    st.tm_sec=0;
STEP2:
    st.tm_year-=1900;
    if (st.tm_mon>12) {t=st.tm_mon;st.tm_mon=st.tm_mday;st.tm_mday=t;}
    st.tm_mon-=1;
    tt=mktime(&st);
    if (-1!=tt) {
        strftime(tmpbuf,128,"%Y-%m-%d %H:%M:%S",localtime(&tt));
        return 1;
    } else {
        printf("[%s] is Invalid time string!\n",timstr);
        return 0;
    }
}
int main() {
    strcpy(timstr,"10.01.2012 15:43"        );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
    strcpy(timstr,"8/11/2006 11:10AM"       );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
    strcpy(timstr,"2006/10/31 04:50 PM"     );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
    strcpy(timstr,"1/6/2010 5:20:12 PM"     );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
    strcpy(timstr,"13/12/2012 11:16:17 a.m.");if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
    strcpy(timstr,"2013-06-08 09:56:59"     );if (dtparse()) printf("[%s] is [%s]\n",timstr,tmpbuf);
    return 0;
}
//[10.01.2012 15:43] is [2012-10-01 15:43:00]
//[8/11/2006 11:10AM] is [2006-11-08 11:10:00]
//[2006/10/31 04:50 PM] is [2006-10-31 16:50:00]
//[1/6/2010 5:20:12 PM] is [2010-06-01 17:20:12]
//[13/12/2012 11:16:17 a.m.] is [2012-12-13 11:16:17]
//[2013-06-08 09:56:59] is [2013-06-08 09:56:59]
//
lalalallalalalala 2015-07-24
  • 打赏
  • 举报
回复
求解求解~~
lalalallalalalala 2015-07-24
  • 打赏
  • 举报
回复
另外如果scanf("%d/%d/%d",&year,&month,&day)变成这种形式的话就不能运行了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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