使用枚举的日历
Calendar using enumeration
我正在尝试在枚举的帮助下编写一个程序,我可以用它来显示今天和第二天。问题是我不知道如何从键盘输入今天来计算第二天。如果我在代码中输入变量,它会正确计算。我正在尝试学习 C,但我仍处于起步阶段,这就是为什么我使用了一些不必要的功能。
#include <stdio.h>
#include <stdlib.h>
typedef enum {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec} month;
int day_today(month m, int i)
{
int day_of_month;
switch (m)
{
case jan: printf("january %d \n", i);
day_of_month = 31;
break;
case feb: printf("february %d \n", i);
day_of_month = 28;
break;
case mar: printf("march %d \n", i);
day_of_month = 31;
break;
case apr: printf("april %d \n", i);
day_of_month = 30;
break;
case may: printf("may %d \n", i);
day_of_month = 31;
break;
case jun: printf("june %d \n", i);
day_of_month = 30;
break;
case jul: printf("jule %d \n", i);
day_of_month = 31;
break;
case aug: printf("august %d \n", i);
day_of_month = 31;
break;
case sep: printf("september %d \n", i);
day_of_month = 30;
break;
case oct: printf("pctomber %d \n", i);
day_of_month = 31;
break;
case nov: printf("november %d \n", i);
day_of_month = 30;
break;
case dec: printf("december %d \n", i);
day_of_month = 31;
break;
default: printf("Error at input month \n");
}
return day_of_month;
}
month next_month(month m)
{
return(m+1%12);
}
int next_day(int d)
{
return(d+1);
}
int main()
{
month a_month = feb ;
int d = 28 ;
int day_of_month;
//printf("Give the month and day: ");
//scanf("%c %d\n", &a_month, &d);
day_of_month = day_today(a_month, d);
if (d >= day_of_month)
{
a_month = next_month(a_month);
d = 1;
}
else d = next_day(d);
printf( day_today(a_month,d));
return 0;
}
你的scanf有误,试试:
scanf("%d", &a_month);
同时添加对用户日期输入的错误检查。它必须在 [1,max_day_of_month]
之内。如果不进行此项检查,则不应打印当前日期。
这是检查输入日期的实现之一。
#include <stdio.h>
#include <stdlib.h>
typedef enum {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec} month;
void isValidDate(int day_of_month,int d, char* s)
{
if(d>=1 && d<=day_of_month)
printf("%s %d\n",s,d);
}
int day_today(month m, int i)
{
int day_of_month;
switch (m)
{
case jan: day_of_month = 31;
isValidDate(day_of_month,i,"january");
break;
case feb: day_of_month = 28;
isValidDate(day_of_month,i,"february");
break;
case mar: day_of_month = 31;
isValidDate(day_of_month,i,"march");
break;
case apr: day_of_month = 30;
isValidDate(day_of_month,i,"april");
break;
case may: day_of_month = 31;
isValidDate(day_of_month,i,"may");
break;
case jun: day_of_month = 30;
isValidDate(day_of_month,i,"june");
break;
case jul: day_of_month = 31;
isValidDate(day_of_month,i,"july");
break;
case aug: day_of_month = 31;
isValidDate(day_of_month,i,"august");
break;
case sep: day_of_month = 30;
isValidDate(day_of_month,i,"september");
break;
case oct: day_of_month = 31;
isValidDate(day_of_month,i,"octomber");
break;
case nov: day_of_month = 30;
isValidDate(day_of_month,i,"november");
break;
case dec: day_of_month = 31;
isValidDate(day_of_month,i,"december");
break;
default: printf("Error at input month \n");
}
return day_of_month;
}
month next_month(month m)
{
return((m+1)%12);
}
int next_day(int d)
{
return(d+1);
}
int main()
{
month a_month = 1 ;
int d = 28 ;
printf("Give the month and day: ");
scanf("%u %d", &a_month, &d);
int day_of_month = day_today(a_month, d);
if (d > day_of_month)
{
fprintf(stderr,"Invalid Date");
return -1;
}
else if(d == day_of_month)
{
a_month = next_month(a_month);
d = 1;
}
else
d = next_day(d);
printf("Next, a_month = %d, d = %d\n",a_month,d);
return 0;
}
我正在尝试在枚举的帮助下编写一个程序,我可以用它来显示今天和第二天。问题是我不知道如何从键盘输入今天来计算第二天。如果我在代码中输入变量,它会正确计算。我正在尝试学习 C,但我仍处于起步阶段,这就是为什么我使用了一些不必要的功能。
#include <stdio.h>
#include <stdlib.h>
typedef enum {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec} month;
int day_today(month m, int i)
{
int day_of_month;
switch (m)
{
case jan: printf("january %d \n", i);
day_of_month = 31;
break;
case feb: printf("february %d \n", i);
day_of_month = 28;
break;
case mar: printf("march %d \n", i);
day_of_month = 31;
break;
case apr: printf("april %d \n", i);
day_of_month = 30;
break;
case may: printf("may %d \n", i);
day_of_month = 31;
break;
case jun: printf("june %d \n", i);
day_of_month = 30;
break;
case jul: printf("jule %d \n", i);
day_of_month = 31;
break;
case aug: printf("august %d \n", i);
day_of_month = 31;
break;
case sep: printf("september %d \n", i);
day_of_month = 30;
break;
case oct: printf("pctomber %d \n", i);
day_of_month = 31;
break;
case nov: printf("november %d \n", i);
day_of_month = 30;
break;
case dec: printf("december %d \n", i);
day_of_month = 31;
break;
default: printf("Error at input month \n");
}
return day_of_month;
}
month next_month(month m)
{
return(m+1%12);
}
int next_day(int d)
{
return(d+1);
}
int main()
{
month a_month = feb ;
int d = 28 ;
int day_of_month;
//printf("Give the month and day: ");
//scanf("%c %d\n", &a_month, &d);
day_of_month = day_today(a_month, d);
if (d >= day_of_month)
{
a_month = next_month(a_month);
d = 1;
}
else d = next_day(d);
printf( day_today(a_month,d));
return 0;
}
你的scanf有误,试试:
scanf("%d", &a_month);
同时添加对用户日期输入的错误检查。它必须在 [1,max_day_of_month]
之内。如果不进行此项检查,则不应打印当前日期。
这是检查输入日期的实现之一。
#include <stdio.h>
#include <stdlib.h>
typedef enum {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec} month;
void isValidDate(int day_of_month,int d, char* s)
{
if(d>=1 && d<=day_of_month)
printf("%s %d\n",s,d);
}
int day_today(month m, int i)
{
int day_of_month;
switch (m)
{
case jan: day_of_month = 31;
isValidDate(day_of_month,i,"january");
break;
case feb: day_of_month = 28;
isValidDate(day_of_month,i,"february");
break;
case mar: day_of_month = 31;
isValidDate(day_of_month,i,"march");
break;
case apr: day_of_month = 30;
isValidDate(day_of_month,i,"april");
break;
case may: day_of_month = 31;
isValidDate(day_of_month,i,"may");
break;
case jun: day_of_month = 30;
isValidDate(day_of_month,i,"june");
break;
case jul: day_of_month = 31;
isValidDate(day_of_month,i,"july");
break;
case aug: day_of_month = 31;
isValidDate(day_of_month,i,"august");
break;
case sep: day_of_month = 30;
isValidDate(day_of_month,i,"september");
break;
case oct: day_of_month = 31;
isValidDate(day_of_month,i,"octomber");
break;
case nov: day_of_month = 30;
isValidDate(day_of_month,i,"november");
break;
case dec: day_of_month = 31;
isValidDate(day_of_month,i,"december");
break;
default: printf("Error at input month \n");
}
return day_of_month;
}
month next_month(month m)
{
return((m+1)%12);
}
int next_day(int d)
{
return(d+1);
}
int main()
{
month a_month = 1 ;
int d = 28 ;
printf("Give the month and day: ");
scanf("%u %d", &a_month, &d);
int day_of_month = day_today(a_month, d);
if (d > day_of_month)
{
fprintf(stderr,"Invalid Date");
return -1;
}
else if(d == day_of_month)
{
a_month = next_month(a_month);
d = 1;
}
else
d = next_day(d);
printf("Next, a_month = %d, d = %d\n",a_month,d);
return 0;
}