C 打印给定日期的工作日,在输入中扫描问题
我所发布的代码,是我最后能够理解的另一个问题的重复代码。然而,我现在遇到的这个问题完全不同了。我遇到的问题是输入部分的扫描 我必须有两种有效的输入格式: 年月日示例:2014年4月3日 产出:星期二 年月日示例:2014年3月4日 产出:星期二 我发布的代码实际上可以采用这两种格式。但是,只有mm/dd/yyyy格式打印出正确的工作日。例如,2014年4月3日打印的星期二是正确的。然而,当我输入2014年3月4日时,它会打印出一个星期六。我不知道怎么了C 打印给定日期的工作日,在输入中扫描问题,c,date,time,C,Date,Time,我所发布的代码,是我最后能够理解的另一个问题的重复代码。然而,我现在遇到的这个问题完全不同了。我遇到的问题是输入部分的扫描 我必须有两种有效的输入格式: 年月日示例:2014年4月3日 产出:星期二 年月日示例:2014年3月4日 产出:星期二 我发布的代码实际上可以采用这两种格式。但是,只有mm/dd/yyyy格式打印出正确的工作日。例如,2014年4月3日打印的星期二是正确的。然而,当我输入2014年3月4日时,它会打印出一个星期六。我不知道怎么了 #include<stdio.h&g
#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;
}
#包括
int main()
{
整月、第1天、第2天、总天数、年份、dm、dn、leap、rmd;
char month1[10],一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月;
printf(“”);
scanf(“%d/%d/%d”,&month,&day1,&year)| scanf(“%s%d,%d”,month1,&day1,&year);
如果(月1==一月){
月=1;
}
如果(月1==二月){
月=2;
}
如果(月1==三月){
月=3;
}
如果(月1==四月){
月=4;
}
如果(月1==五月){
月=5;
}
如果(月1==六月){
月=6;
}
如果(月1==7月){
月=7;
}
如果(月1==八月){
月=8;
}
如果(月1==九月){
月=9;
}
如果(月1==10月){
月=10;
}
如果(月1==11月){
月=11;
}
如果(月1==12月){
月=12;
}
如果((第%4年==0)和&(第%100年!=0))| |(第%400年==0))
{
如果(月份==1)
dm=0;
如果(月份==2)
dm=31;
如果(月份==3)
dm=60;
如果(月份==4)
dm=91;
如果(月=5)
dm=121;
如果(月份==6)
dm=152;
如果(月份==7)
dm=182;
如果(月份==8)
dm=213;
如果(月份==9)
dm=244;
如果(月=10)
dm=274;
如果(月=11)
dm=305;
如果(月份==12)
dm=335;
}
其他的
{
如果(月份==1)
dm=0;
如果(月份==2)
dm=31;
如果(月份==3)
dm=59;
如果(月份==4)
dm=90;
如果(月=5)
dm=120;
如果(月份==6)
dm=151;
如果(月份==7)
dm=181;
如果(月份==8)
dm=212;
如果(月份==9)
dm=243;
如果(月=10)
dm=273;
如果(月=11)
dm=304;
如果(月份==12)
dm=334;
}
第2天=(1905年)*(365.25);
dn=dm+day1;
总天数=第2天+dn;
rmd=总天数%7;
如果(rmd==2)
{
printf(“星期一”);
}
如果(rmd==3)
{
printf(“星期二”);
}
如果(rmd==4)
{
printf(“星期三”);
}
如果(rmd==5)
{
printf(“星期四”);
}
如果(rmd==6)
{
printf(“星期五”);
}
如果(rmd==0)
{
printf(“星期六”);
}
如果(rmd==1)
{
printf(“星期日”);
}
返回0;
}
看看编译器应该告诉您什么:
警告:指针和整数之间的比较[默认启用]
您不能这样做,因为month1
是char*
,March
是char
(命名为March,没有值):
使用strcmp
函数比较如下字符串:
if(strcmp(month1, "March") == 0) { month=3; }
在测试月份名称的所有适当位置更改此选项,也可以删除所有以月份命名的变量,因为您不需要它们。hmmm,感谢您的响应,该方法有效!。然而,我不确定我是否被允许在这个项目上使用它,因为我甚至还没有被教过。你能推荐一种更好的方法来接受输入吗?像一根绳子什么的?我可能已经学到了一些东西。@user3436065为什么不使用该语言提供的工具呢?你的老师不应该对此抱怨。如果你想接受字符串形式的输入,比如2014年3月4日的
March 04
,在某个时候你必须将字符串的月份部分与固定值进行比较,而strcmp
是比较字符串的常用方法。还有其他比较单词和值的方法更复杂吗?@user3436065不太复杂(如果你对C非常了解的话),但是你会重新创建strcmp已经做过的事情(而且很可能是以一种效率较低的方式)。
if(strcmp(month1, "March") == 0) { month=3; }