Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 返回提供了日期、月份、年份和一月一日的星期几?_C - Fatal编程技术网

C 返回提供了日期、月份、年份和一月一日的星期几?

C 返回提供了日期、月份、年份和一月一日的星期几?,c,C,我的C99如下所示: int dayOfWeek(int day,int month,int year,int firstJan) 第一个参数day提供感兴趣的日期− 范围从1到31(含)。第二个参数month提供利息月份− 范围从1到12(含)。第三个参数year提供了利息年− 1970或更大的任何整数值。第四个参数firstJan表示所提供年份中1月1日所在的星期几 该函数将返回指定日期所在的星期几。例如,呼叫: dayOfWeek(13, 11, 2017, 0); 将返回整数1(表示星

我的C99如下所示:

int dayOfWeek(int day,int month,int year,int firstJan)

第一个参数day提供感兴趣的日期− 范围从1到31(含)。第二个参数month提供利息月份− 范围从1到12(含)。第三个参数year提供了利息年− 1970或更大的任何整数值。第四个参数firstJan表示所提供年份中1月1日所在的星期几

该函数将返回指定日期所在的星期几。例如,呼叫:

dayOfWeek(13, 11, 2017, 0);
将返回整数1(表示星期一)

我如何找到解决方案?其允许值为0(表示星期日)、1(表示星期一)等,最多为6(表示星期六)。已编辑代码:

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 int dayOfweek(int day, int month, int year, int firstJan)
  5 {
  6         int mth[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
  7         int mth_leap[] = {0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335};
  8 
  9         if(year <1970 || month < 1 || month > 12 || day < 1 || day > 31 || firstJan < 0 || firstJan > 6 ){
 10         printf("invalid input");
 11         //return -1;
 12         }
 13 
 14         if (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)){
 15                 day = mth_leap[month - 1] + day ;
 16         }else{
 17                 day = mth[month - 1] + day;
 18         }
 19 
 20         int dow = (day - firstJan + 7)%7;
 21         printf("Day of week is %i.\n", dow);
 22         //return 1;
 23 
 24 }
1#包括
2#包括
3.
4周的整数日(整数日、整数月、整数年、整数一月)
5 {
6 int mth[]={0,31,59,90,120,151,181,212,243,273,304,334};
7英特姆苏闰[]={0,31,60,91,121,152,182,213,244,274,305,335};
8.
9如果(第12年| |天<1 | |天>31 | |第一个一月<0 | |第一个一月>6){
10 printf(“无效输入”);
11//return-1;
12         }
13
14如果(第%4年==0&(第%100年!=0 | |第%400年==0)){
15天=月跳[月-1]+天;
16}其他{
17天=第个月[第1个月]+天;
18         }
19
20国际道琼斯指数=(1月1日+7)%7;
21 printf(“星期几为%i.\n”,道琼斯指数);
22//返回1;
23
24 }

只需使用
mktime()
即可找到一周中的哪一天

mktime函数

成功完成后,适当设置结构的
tm_wday
tm_yday
组件的值,并将其他组件设置为表示指定的日历时间


用铅笔和一张纸怎么做?不需要“一月一日”的副本。道琼斯指数独立于1月1日。也许它仅用于确定0是星期日、星期一还是……@JimYe我看到
int dayOfWeek(int day、int month、int year)
woudl提供与
int dayOfWeek(int day、int month、int year、int firstJan)相同的答案
因此不清楚为什么
int firstJan
是函数签名的一部分。
firstJan
使练习更容易,但对于firstJan的方法来说,不必这样做,表[month]的含义是什么?@JimYe一些代码需要如何将
month
转换为“从一月开始的天”。也许是一个表查找?0,31,31+28,31+28+31,…我已经添加了我的代码。你能帮我吗?我得到了控制到达非无效函数末尾的错误?@JimYe 1)一旦答案开始到达,就更改问题是糟糕的堆栈溢出礼仪。建议回滚编辑。2)
int dayOfweek()
需要返回某些内容或使其
void dayOfweek()
#include <time.h>

int dayOfWeek(int day, int month, int year, int /*firstJan*/) {
   // struct tm members domain are: years from 1900, and months since January
   // Important to set tm_isdst = -1 to let the function determine dst setting.
   struct tm ymd = { .tm_year - 1900, .tm_mon = month - 1, .tm_mday = day, .tm_isdst = -1);

   time_t t = mktime(&ymd);  // this will fill in .tm_wday
   if (t == -1) return -1;  // Failed to find a valid calender time (and day-of-the-week)
   return ymd.tm_wday;
}
int dayOfWeek(int day, int month, int year, int firstJan) {
  days_since_jan1 = table[month] + day;
  if (month > Feb and isleap(year)) days_since_jan1++;
  dow = (days_since_jan1 - firstJan + 7)%7
}