用C创建日历

时间:2016-01-30 05:27:40

标签: c calendar

我知道我的代码很接近,但它并没有起作用。

它应该包括日历开始的一周中的日期以及该月的天数。

我能帮忙纠正一下吗?

int main(void)
{
    int start_day, days_in_month, i, day_of_week;

    printf("Enter start day: ");
    scanf("%d", &start_day);

    printf("Enter days in month: ");
    scanf("%d", &days_in_month);

    for (i = 1 ; i < start_day; i++) {
        printf("   ");
    }

    for (i = 1; i <= days_in_month; i++) {
        printf("%2d ", i);
        if ((i + start_day - 1) % 7 == 0) {
            printf("\n");
        }
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我可以看到一些小问题:

  • 您应该添加#include <stdio.h>
  • 您不应该定义day_of_week,因为您不使用它。
  • 您可能希望避免在每行末尾打印空格。
  • 如果最后一行不完整,您应该在日历后输出额外的换行符。
  • 您应该测试scanf的返回值,如果没有输入数字则中止,以避免未定义的行为。

以下是更正后的版本:

#include <stdio.h>

int main(void) {
    int start_day, days_in_month, i;

    printf("Enter start day: ");
    if (scanf("%d", &start_day) != 1)
        return 1;

    printf("Enter days in month: ");
    if (scanf("%d", &days_in_month) != 1)
        return 1;

    for (i = 1; i < start_day; i++) {
        printf("   ");
    }

    for (i = 1; i <= days_in_month; i++) {
        printf("%2d", i);
        if ((i + start_day - 1) % 7 == 0) {
            printf("\n");
        } else {
            printf(" ");
        }
    }
    if ((days_in_month + start_day - 1) % 7 != 0) {
        printf("\n");
    }
    return 0;
}