c - 如果没有大量 12x12 switch 语句,我该如何处理日历?

标签 c date struct switch-statement

我明天要去参加一些辅导,但我想看看能不能在这里得到解释。试图问我类的一个 friend ,但解释没有意义。

我应该以包含日、月和年的结构形式接受用户的输入。

这是我现在真正拥有的一切:

enum month
{
        JAN = 1, FEB, MAR, APR, MAY, JUNE, JUL, AUG, SEPT,
        OCT, NOV, DEC
};

struct date_t
{
        unsigned short month;
        unsigned short day;
        unsigned short year;
};

int main(void)
{
        date_t date; /*Allocates space for 3 unsigned shorts,
        all for the date*/

        printf("Please enter the month as an integer: \n");
        scanf("%hu");

        printf("Please enter the day as an integer: \n");
        scanf("%hu");

        printf("Please enter the year as an integer: \n");
        scanf("%hu");

        return 0;
}

所以,这是我的问题。

我可以为月份 + 星座组合的每个案例编写一个绝对庞大的 12x12(144 个选项)switch 语句,但这只是精神错乱。我真的不知道在这里做什么。

这个想法是如果用户输入:

8 (month)

28 (day)

12 (year)

我的程序应该输出:

August 28th, 2012, Virgo

主要问题是我们还没有学会将字符串存储为变量的方法。我们已经完成了。

所以我可以用 12 个案例(每个月一个)创建一个 switch 语句,并给每个案例一个不同的“printf”语句 ("月 %d, %d", date.day, date.year)

但是那我怎么算生肖呢?还有,那是 12 个案例,感觉有点荒谬。

我的老师提出了一些关于转换为 Julian 日期的建议,我几乎明白了如何做,但似乎我需要一个非常复杂的 for 循环,里面有一个 switch 语句或一堆 if/elses。

我究竟做错了什么?什么是更简单的解决方案?

编辑:

我设法解决了 2/3 的问题。现在我遇到了一个不同的人。

我需要处理闰年(不管是什么意思)并找到它们的符号。啊。

编辑 2:想通了!希望我能向您展示所有代码,而不会使这篇文章冗长得离谱。它虽然有效!很高兴!现在我需要为它制作一个菜单系统。 ;-;

最佳答案

我想你在想你必须做一个打印语句来一次打印整行,但你可以有多个打印语句,每个只打印部分行。

由于这是一个学习练习,我不想透露太多,但我知道您可以像这样打印您的答案:

printf("August ");
printf("28th, ");
printf("2012, ");
printf("Virgo");
printf("\n");

关于c - 如果没有大量 12x12 switch 语句,我该如何处理日历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32918699/

相关文章:

c - Xcode 中缺少 c.h?

mysql - 根据日期范围检查行数与日期范围

c - c中的节点和结构

c - Fgets 被忽略且程序仅读取 2 个输入数据(链表)

c - 为什么以下数组操作是非法的?

c - Posix PIPE 上的非阻塞读取和阻塞写入

MongoDB java-driver插入日期

python - 如何将日期时间值更改为单独格式化的值

c - 将 char 数组反序列化为 int 和 int[] 以及 struct?

c - 为什么我在 C 中使用 UDP 套接字接收文件时会出现一些垃圾字节?