一剑飘零 发表于 2022-5-23 23:19

请各位大佬给个注释

本帖最后由 一剑飘零 于 2022-5-23 23:31 编辑

太烧脑了,在学结构体。果然是掉头发。麻烦大佬一点点时间,帮小弟注释一下吧。最好是白话文最容易理解的,有时我也能理解通,有时又迷糊了。
#include <stdio.h>
#include <stdbool.h>

//输入年月日计算出明天是什么日子
struct date {
        int month;
        int day;
        int year;
};
bool isLeap(struct date d);
int number0fDays(struct date d);
int main() {
        struct date today, tomorrow;
        printf("请输入年月日(年 月 日):");
        scanf("%d %d %d", &today.year, &today.month, &today.day);
        if (today.day != number0fDays(today)) {   //这里有些烧脑
                tomorrow.day = today.day + 1;
                tomorrow.month = today.month;
                tomorrow.year = today.year;

        } else if (today.month == 12) { //这个好理解
                tomorrow.day = 1;
                tomorrow.month = 1;
                tomorrow.year = today.year + 1;
        } else { //这个也好理解
                tomorrow.day = 1;
                tomorrow.month = today.month + 1;
                tomorrow.year = today.year;
        }
//        printf("%d",isLeap());
        printf("明天的日期是%d年%d月%d日\n", tomorrow.year, tomorrow.month, tomorrow.day);

        return 0;
}
int number0fDays(struct date d) {
        int days;
        const int daysPerMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        if (d.month == 2 && isLeap(d)) {   //这里的d代表的是什么?是哪个变量?是不是就是我输入的today?也就是说number0fDays和isLeap其实都是main中我输入的today的值?
                days = 29;
        } else {
                days = daysPerMonth;//还有这里迷糊了。
        }
        return days;
}
bool isLeap(struct date d) { //这里返回值是不是就是true和false?还有这个参数都是形参,应该是main里面调用number0fDays这个函数中它再调用isLeap,我饶晕了
        bool leap = false;
        if ((d.year % 4 == 0 && d.year % 100 != 0) || d.year % 400 == 0)
                leap = true;
        return leap;
}

搜索曾经的回忆 发表于 2022-5-23 23:41

睡一觉,然后搞,说不定就搞出来了,我就是这样

平淡最真 发表于 2022-5-23 23:44

16行就是调用这个月有多少天的函数,主要是判断今天是不是这个月最后一天,是和不是明天的计算方法不一样。
38行,d就是main里的today
41行,如果不是闰年2月,每个月天数就是数组里的数字,直接用下标访问取出来。-1是下标从0开始
45行,就判断是不是闰年啊,你说的也是对的。

一剑飘零 发表于 2022-5-23 23:51

搜索曾经的回忆 发表于 2022-5-23 23:41
睡一觉,然后搞,说不定就搞出来了,我就是这样

也是。有时看通了。再过一会又不懂了。反正就是太烧脑了。逻辑性太强了。

一剑飘零 发表于 2022-5-23 23:52

平淡最真 发表于 2022-5-23 23:44
16行就是调用这个月有多少天的函数,主要是判断今天是不是这个月最后一天,是和不是明天的计算方法不一样。 ...

感谢指点。-1原来是从0开始啊。这下知道了。我说下标哪有-1。

luxingyu329 发表于 2022-5-24 00:16

搜索曾经的回忆 发表于 2022-5-23 23:41
睡一觉,然后搞,说不定就搞出来了,我就是这样

是这么个道理,我也这样:lol

WuJ1n9 发表于 2022-5-24 00:29

一剑飘零 发表于 2022-5-23 23:52
感谢指点。-1原来是从0开始啊。这下知道了。我说下标哪有-1。

-1是因为月份和数组下标之间差值为1
比如:1月的数组下标为0   5月的数组下标为4
所以【月份-1】才是这个月份在数组中的位置

闷骚小贱男 发表于 2022-5-24 07:06

一般简单的,百度都能搜到意思。。
就像我自学JavaScript、php、html、易语言、smail的时候。。。
大部分都是在百度或者在百度的路上。
用的多了就还是要继续百度。。。。

vtor 发表于 2022-5-24 09:18

同志仍需努力,加油学习啊,
这个真的太基础了

Rocky10 发表于 2022-5-24 09:21

平淡最真 发表于 2022-5-23 23:44
16行就是调用这个月有多少天的函数,主要是判断今天是不是这个月最后一天,是和不是明天的计算方法不一样。 ...

有劳看下我的悬赏帖:
https://www.52pojie.cn/thread-1639706-1-1.html
页: [1] 2
查看完整版本: 请各位大佬给个注释