gpt4 book ai didi

c - C 中日历作业的问题

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:01 25 4
gpt4 key购买 nike

我正在编写一个程序,从用户那里获取 monthyear,然后打印出日历。但是日历只在一月份(每两年一次)是正确的。

如何使其他月份正确?我做错了什么?

#include "stdafx.h"

void printMonth (int* startDay, int* days);

int _tmain(int argc, _TCHAR* argv[])
{

int startDay, days, year, month, a;

printf("enter year: ");
scanf("%d", &year);
printf("enter month: ");
scanf("%d", &month);

a = year - 1;
startDay = ((a * 365) + (a / 4) - (a / 100) + (a / 400) + 1) % 7;

switch (month)
{
case 1: days = 31;
break;
case 2: days = 28;
break;
case 3: days = 31;
break;
case 4: days = 30;
break;
case 5: days = 31;
break;
case 6: days = 30;
break;
case 7: days = 31;
break;
case 8: days = 31;
break;
case 9: days = 30;
break;
case 10: days = 31;
break;
case 11: days = 30;
break;
case 12: days = 31;
break;
}

printMonth (&startDay, &days);

printf("\nstart day: %d\n", startDay);
printf("\na: %d\n", a);

return 0;
}

void printMonth (int* startDay, int* days)
{
int weekDay;

printf("Sun Mon Tue Wed Thu Fri Sat\n");
printf("--- --- --- --- --- --- ---\n");

for (weekDay = 0; weekDay < *startDay; weekDay++)
printf(" ");

for (int dayCount = 1; dayCount <= *days; dayCount++)
{
if (weekDay > 6)
{
printf("\n");
weekDay = 1;
}
else
weekDay++;
printf("%3d ", dayCount);
}

printf("\n--- --- --- --- --- --- ---\n");

return;
}

最佳答案

1) 初始化所有变量。

int startDay, days, year, month, a;
startDay = -1;
days = -1;

在这种情况下,“-1”或“0”表示仍然没有用户提供的真实内容的值。在其他情况下,您可以选择初始化为“合理的”有效默认值。这有助于调试。检查调试值是非常难看的,调试值是创建变量时碰巧出现的任何垃圾。

我不记得 C 是否允许您在一行中执行此操作,如 C++。无论哪种方式,初始化它们。

2) 检查并验证用户的输入。

printf("enter year: ");
scanf("%d", &year);
// Check validity of year here. If year not valid, ask again, abort, or anything.

3) 使用断言验证代码的逻辑(当然,不要这样做来验证用户的输入;参见 2)。

assert(month >= 1);
assert(month <= 12);
switch (month)
{ // ...

void printMonth (int startDay, int days)
{
assert(startDay >= 1);
assert(startDay <= 31);
assert(days >= 0);
// ...

仔细检查您是否确实处于 Debug模式,以及失败的断言是否做了一些事情。对于一次执行,只需编写 assert(0); (我不知道你在 C 中是否有 bool 值)。那应该会失败。

4) 在不同的功能中做不同的事情。要求用户一个月然后再用它做任何“复杂”的事情是一种代码味道。

关于c - C 中日历作业的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1861096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com