C语言 给日期算星期几

帮我看一下哪里错了。大概思路是先检验输入的日期的正确性然后把正确的日期代入公式算出星期几。
#include "stdio.h"
main()
{
int y,m,d,a,b;
b=0;
scanf("%d%d%d",&y,&m,&d);
if(m>12||m<0) {b=1 printf("month is error.\n")};
else {if(d<0) {b=1; printf("day is error.\n")};
else{switch(m)
{
case 1: if(d>32) {b=1 printf("day is error.\n")}; break;
case 2: if((y%4==0&&y%100!=0)||(y%400==0)) a==1;
else a==2;
if(a==1&&d>30) {b=1 printf("day is error.\n")}; break;
if(a==2&&d>29) {b=1 printf("day is error.\n")}; break;
case 3: if(d>32) {b=1 printf("day is error.\n")}; break;
case 4: if(d>31) {b=1 printf("day is error.\n")}; break;
case 5: if(d>32) {b=1 printf("day is error.\n")}; break;
case 6: if(d>31) {b=1 printf("day is error.\n")}; break;
case 7: if(d>32) {b=1 printf("day is error.\n")}; break;
case 8: if(d>32) {b=1 printf("day is error.\n")}; break;
case 9: if(d>31) {b=1 printf("day is error.\n")}; break;
case 10: if(d>32) {b=1 printf("day is error.\n")}; break;
case 11: if(d>31) {b=1 printf("day is error.\n")}; break;
case 12: if(d>32) {b=1 printf("day is error.\n")}; break;
}
}
if(m==1||m==2) {
m+=12;
y--;}

if(b=0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("1\n"); break;
case 1: printf("2\n"); break;
case 2: printf("3\n"); break;
case 3: printf("4\n"); break;
case 4: printf("5\n"); break;
case 5: printf("6\n"); break;
case 6: printf("0\n"); break;
}
}
system("pause");
}

你好!

程序改了,错误很多,都是你粗心造成的,很多都是少了逗号多了分号;

代码发给你,你看看吧,注意后面的注释说明:

#include "stdio.h"
#include <stdlib.h>  // 缺少头文件 

main()
{
    int y,m,d,a,b;
    b=0;
    scanf("%d%d%d",&y,&m,&d); 
    if(m>12||m<0) 
{
b=1;                          // b=1 后面少了逗号 
printf("month is error.\n");  // 最后面少了逗号
}                                 // 这里结尾的分号去掉
    else 
{
if(d<0) 
{
b=1; 
printf("day is error.\n");// 最后面少了逗号
}                             // 这里结尾的分号去掉
    else
switch(m)
    {
    case 1: if(d>32) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号 
    case 2: if((y%4==0&&y%100!=0)||(y%400==0)) a=1;            
                        // 这里把 a==1 改成 a=1 
    else a==2;                                                 
                        // 这里把 a==2 改成 a=2
    if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;   
                        // 问题同上,少逗号
    if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;   
                        // 问题同上,少逗号
    case 3: if(d>32) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 4: if(d>31) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 5: if(d>32) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 6: if(d>31) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 7: if(d>32) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 8: if(d>32) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 9: if(d>31) {b=1; printf("day is error.\n");}; break; 
                        // 问题同上,少逗号
    case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
                        // 问题同上,少逗号
    case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
                        // 问题同上,少逗号
    case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
                        // 问题同上,少逗号
    }
    }
    if(m==1||m==2) {
        m+=12;
        y--;} 
    
    if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 
       // 这里把 b=0 改成 b==0 
    switch(iWeek)
    {
    case 0: printf("1\n"); break;
    case 1: printf("2\n"); break;
    case 2: printf("3\n"); break;
    case 3: printf("4\n"); break;
    case 4: printf("5\n"); break;
    case 5: printf("6\n"); break;
    case 6: printf("0\n"); break;
    } 
    }
    system("pause"); 
}

追问

少了一个大括号。。不用了谢谢

追答

这么多错误,居然就说少了一个大括号,真聪明

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-03
#include "stdio.h"
main()
{
int y,m,d,a,b;
b=0;
scanf("%d%d%d",&y,&m,&d);
if(m>12||m<0) {b=1; printf("month is error.\n");}
else {if(d<0) {b=1; printf("day is error.\n");}
else{switch(m)
{
case 1: if(d>32) {b=1; printf("day is error.\n");}; break;
case 2: if((y%4==0 && y%100!=0)||(y%400==0)) a=1;
else a=2;
if(a==1&&d>30) {b=1; printf("day is error.\n");}; break;
if(a==2&&d>29) {b=1; printf("day is error.\n");}; break;
case 3: if(d>32) {b=1; printf("day is error.\n");}; break;
case 4: if(d>31) {b=1; printf("day is error.\n");}; break;
case 5: if(d>32) {b=1;printf("day is error.\n");}; break;
case 6: if(d>31) {b=1;printf("day is error.\n");}; break;
case 7: if(d>32) {b=1; printf("day is error.\n");}; break;
case 8: if(d>32) {b=1; printf("day is error.\n");}; break;
case 9: if(d>31) {b=1; printf("day is error.\n");}; break;
case 10: if(d>32) {b=1; printf("day is error.\n");}; break;
case 11: if(d>31) {b=1; printf("day is error.\n");}; break;
case 12: if(d>32) {b=1; printf("day is error.\n");}; break;
}
}
if(m==1||m==2) {
m+=12;
y--;}

if(b==0) {int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("1\n"); break;
case 1: printf("2\n"); break;
case 2: printf("3\n"); break;
case 3: printf("4\n"); break;
case 4: printf("5\n"); break;
case 5: printf("6\n"); break;
case 6: printf("0\n"); break;
}
}
system("pause");
}
}本回答被提问者采纳
第2个回答  2018-09-30

补充一个错误,下面回答同理

case 3: if(d>32) {b=1 printf("day is error.\n")}; break;
case 4: if(d>31) {b=1 printf("day is error.\n")}; break;
case 5: if(d>32) {b=1 printf("day is error.\n")}; break;
case 6: if(d>31) {b=1 printf("day is error.\n")}; break;
case 7: if(d>32) {b=1 printf("day is error.\n")}; break;
case 8: if(d>32) {b=1 printf("day is error.\n")}; break;
case 9: if(d>31) {b=1 printf("day is error.\n")}; break;
case 10: if(d>32) {b=1 printf("day is error.\n")}; break;
case 11: if(d>31) {b=1 printf("day is error.\n")}; break;
case 12: if(d>32) {b=1 printf("day is error.\n")}; break;

这一段代码if后面的条件全部大了1,限制值应该是31和30,除非你改成>=

第3个回答  2013-10-18
if(b=0)错了。。
第4个回答  推荐于2017-09-24
C语言根据日期判断星期几(使用基姆拉尔森计算公式)
算法如下:
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一</PRE><PRE>程序如下:
#include "stdio.h"
void CaculateWeekDay(int y,int m, int d)
{
if(m==1||m==2) {
m+=12;
y--;
}
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("星期一\n"); break;
case 1: printf("星期二\n"); break;
case 2: printf("星期三\n"); break;
case 3: printf("星期四\n"); break;
case 4: printf("星期五\n"); break;
case 5: printf("星期六\n"); break;
case 6: printf("星期日\n"); break;
}
}
void main()
{
int year=0,month=0,day=0;
printf("请输入日期:\n格式为:1900,1,1\n");
char temp = '1';
while (temp != '0')
{
scanf("%d,%d,%d",&year,&month,&day);
scanf("%c",&temp);
CaculateWeekDay(year,month,day);
printf("输入0退出,其他继续:");
scanf("%c",&temp);
}
}
相似回答