-2
私のC言語のコードが良くなっていますが、私のコードでいくつかの問題を解決する方法はまだ分かりません。教授は、その日(mm/dd/yyyy)を入力し、経過した日数を吐き出すコードを書くことを望んでいます。選択肢2については、特定の年の日数を入力し、対応する日付を吐き出します。問題は(私たちの教授が私たちに迷惑をかけるのが好きなので)4月31日のようなエラーを解決し、4月は31日を持たず、非閏年で366日を入力します。関数を介して渡された日付と日の解決
int leap(int x)
{
if ((x % 4 == 0 && x % 100 != 0)|| x % 400 == 0)
return 1;
else
return 0;
}
int monthFun(int d, int y)
{
int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i;
if (leap(y))
days[1] = 29;
for (i = 0; ; i++)
if (d > days[i])
d = d - days[i];
else
return i + 1;
return i + 1;
}
int dateFun(int d, int y)
{
int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i, m;
if (leap(y))
days[1] = 29;
for (i = 0; i < m - 1; i++)
if (d > days[i]) {
d = d - days[i];
}
else {
d = d;
m = i;
}
return d;
}
int daysPast(int m, int d, int y)
{
int days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i, past = 0;
if (leap(y))
days[1] = 29;
for (i = 0; i < m - 1; i++)
past = past + days[i];
return past + d;
}
int main()
{
int mm, dd, yy, choice;
char more;
do {
printf ("\n\t\tThis program will find days passed or date in the year");
printf ("\n\t\t\t\t1) Input date (mm/dd/yyyy) to find the days passed");
printf ("\n\t\t\t\t2) Input passed days to find date in the year");
printf ("\n\n\t\t\t\tYour choice (1/2): ");
scanf ("%d", &choice);
if (choice == 1) {
printf ("\n\t\tPlease input date (mm/dd/yyyy): ");
scanf ("%d/%d/%d", &mm, &dd, &yy);
printf ("\n\t\tThere are %d days passed in the year %d", daysPast(mm, dd, yy), yy);
}
else
if (choice == 2){
printf ("\n\t\tInput days: ");
scanf ("%d", &dd);
printf ("\n\t\tInput year: ");
scanf ("%d", &yy);
printf ("\n\t\tThe date is %d/%d/%d", monthFun(dd, yy), dateFun(dd,yy), yy);
}
else
printf ("\n\t\tPlease choose 1 or 2");
printf ("\n\n\t\tDo more (Y/N)? ");
scanf ("%s", &more);
} while (more == 'y' || more == 'Y');
}
私のdateFun()のコードはちょっと控えめです(または少なくとも私に似ています)。私は、上記の問題の1つが入力された場合、プログラムは「無効な入力」のようなものを表示し、「もっとやる」に戻ることを考えました。どのようなヒントをいただければ幸いです!