-3

我正在使用 c++ 编写一个程序,该程序将要求用户输入诸如 (12 31) 之类的日期,该程序将输出天数和星期几,因此 (12 31) 将返回 (365 Tue )。到目前为止我有

 #include <iostream>
 using namespace std;
 int main (){ 
 while (true)  
 cout << "Enter date: "; cin >> mon >>day;
 if (!mon && !day) break; //this is so that 
 when the user enters (0 0) the program ends
 }
 cout << "Bye" << endl;
 return 0;
 }

我应该如何让程序将日期与数字和星期几匹配?我刚开始通过在线教程学习 c++,所以我不是很流利,但我确实知道一些东西。我需要创建一个新功能吗?我的主要问题是我遇到了一个障碍,我应该如何让程序从给定日期计算天数(我想的范围是 1-365)。不是在寻找答案,但一些帮助会很好。

4

1 回答 1

1

不是在寻找答案,但一些帮助会很好。

当您cin >> mon >>day首先声明int变量monday时,还要检查返回值,所以if (!(cin >> mon day)) ...EOF occurred...

如果您查看管理时间的功能,您可以通过<time.h>包括mktime声明的功能,并且您可以看到它们与struct tm包含您想要的内容一起使用:

int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */

mktime也正是您所需要的:

mktime() 函数将分解的时间结构(表示为本地时间)转换为日历时间表示。

所以你只需要设置字段:

int tm_sec;    /* Seconds (0-60) */
int tm_min;    /* Minutes (0-59) */
int tm_hour;   /* Hours (0-23) */
int tm_mday;   /* Day of the month (1-31) */
int tm_mon;    /* Month (0-11) */
int tm_year;   /* Year - 1900 */

tm_sec/tm_min/tm_hour可以是 0,tm_mday并且tm_month是你必须得到的输入(只是tm_month在之后递减)

唯一缺少的部分是当前年份,但很容易设置,使用time_t time(time_t *tloc);返回当前时间然后将其转换为struct tmusing struct tm *localtime(const time_t *timep);,然后如上所述设置其他字段,然后调用mktime

现在你可以做你的程序

于 2019-03-14T18:21:24.567 回答