打印工作日给出日期,在输入中扫描问题

时间:2014-03-22 00:03:54

标签: c date time

我发布的代码,是我能够最终弄清楚的另一个问题的重复代码。但是,这个问题我现在完全不同了。我遇到问题的部分是输入部分的扫描。

我必须有2种有效的输入格式:

mm / dd / yyyy例如:03/04/2014

输出:星期二

月dd,yyyy示例:2014年3月4日

输出:星期二

我实际发布的代码能够同时采用这两种格式。但是,只有mm / dd / yyyy格式打印出正确的工作日。例如,03/04/2014打印出一个正确的星期二。但是,当我输入2014年3月4日时,它打印出一个星期六。我不确定有什么问题......

#include<stdio.h>

int main()
{
int month,day1,day2,totdays,year,dm,dn,leap,rmd;
char month1[10], January, February, March, April, May, June, July, August, September,    October, November, December;

printf(" ");
scanf("%d/%d/%d",&month,&day1,&year) ||  scanf("%s %d, %d",month1,&day1,&year);



        if(month1==January){
                    month=1;
        }
        if(month1==February){
                    month=2;
                }
        if(month1==March){
                    month=3;
                }
        if(month1==April){
                    month=4;
                }
        if(month1==May){
                    month=5;
                }
        if(month1==June){
                    month=6;
                }
        if(month1==July){
                    month=7;
                }
        if(month1==August){
                    month=8;
                }
        if(month1==September){
                    month=9;
                }
        if(month1==October){
                    month=10;
                }
        if(month1==November){
                    month=11;
                }
        if(month1==December){
                    month=12;
                }






if(((year%4==0) && (year%100!=0)) || (year%400==0))
  {
     if(month==1)
        dm=0;

     if(month==2)
        dm=31;

     if(month==3)
        dm=60;

     if(month==4)
        dm=91;

     if(month==5)
        dm=121;

     if(month==6)
        dm=152;

     if(month==7)
        dm=182;

     if(month==8)
        dm=213;

     if(month==9)
        dm=244;

     if(month==10)
        dm=274;

     if(month==11)
        dm=305;

     if(month==12)
        dm=335;
   }
else
   {
     if(month==1)
        dm=0;

     if(month==2)
        dm=31;

     if(month==3)
        dm=59;

     if(month==4)
        dm=90;

     if(month==5)
        dm=120;

     if(month==6)
        dm=151;

     if(month==7)
        dm=181;

     if(month==8)
        dm=212;

     if(month==9)
        dm=243;

     if(month==10)
        dm=273;

     if(month==11)
        dm=304;

     if(month==12)
        dm=334;
   }


  day2=(year-1905)*(365.25);
  dn=dm+day1;
  totdays=day2+dn;

  rmd=totdays%7;

  if(rmd==2)
    {
       printf("Monday \n");
    }

  if(rmd==3)
    {
       printf("Tuesday \n");
    }

  if(rmd==4)
    {
        printf("Wednesday \n");
    }

  if(rmd==5)
    {
        printf("Thursday \n");
    }

  if(rmd==6)
    {
        printf("Friday \n");
    }

  if(rmd==0)
    {
        printf("Saturday \n");
    }

  if(rmd==1)
    {
        printf("Sunday \n");
    }

  return 0;

}

1 个答案:

答案 0 :(得分:0)

看看你的编译器应该告诉你什么:

  

警告:指针与整数之间的比较[默认启用]

您无法执行此操作,因为month1char*Marchchar(名为March,且缺少值):

if(month1==March) { month=3; }

使用strcmp函数来比较这样的字符串:

if(strcmp(month1, "March") == 0) { month=3; }

在您测试月份名称的所有适当位置更改此项,并且您可以删除所有以月份命名的变量,因为您不需要它们。