2

プログラムは、入力された日付が何曜日であるかを返すことになっています。機能しない日付の 1 つは 01012000 です。何も返されません。しかし、他の閏年では、3 月 1 日を計算することができます。また、一見ランダムな日付が機能しない場合もあります。これを修正する方法がわかりません。また、「daynumber」を計算する部分を書き、後でそれを呼び出すことになっているので、それが正しいかどうかわかりません。

初心者の質問で申し訳ありませんが、これは私の初めての C プログラムです。

#include<stdio.h>
#include<math.h>
int main()
{
int day, month, year, lastday, dayname, daynumber, input, d;

//Determine the last day of user specified month

printf("Enter date: ddmmyyyy:\n");
scanf("%d", &input);

day = input/1000000;
month = (input/10000) % 100;
year = input % 10000;

if (month == 1 || month == 3 || month == 5 || month == 7 || 
    month == 8 || month == 10 || month == 12)
    lastday = 31;
else if (month == 4 || month == 6 || month == 9 || month == 11)
    lastday = 30;
else if ((year%4 == 0 && year%100 !=0) || year%400 == 0)
    lastday = 29;
else
    lastday = 28;

//Verify the date

if (year < 0)
    return 1;
if (month < 1 || month > 12)
    return 2;
if (day < 1 || day > lastday)
    return 3;

//Algorithm

{

int m, d, y, c, daynumber;

if (month > 3)
    m = month - 2;
else
    m = month + 10;

if (m == 11 || m == 12)
    year = year - 1;
else
    year = year;

d = day;
y = year % 100;
c = year / 100;

daynumber = (((13*m - 1)/5) + d + y + (y/4) + (c/4) - 2*c) % 7;

if (daynumber == 0)
    printf("Sunday\n");
if (daynumber == 1)
    printf("Monday\n");
if (daynumber == 2)
    printf("Tuesday\n");
if (daynumber == 3)
    printf("Wednesday\n");
if (daynumber == 4)
    printf("Thursday\n");
if (daynumber == 5)
    printf("Friday\n");
if (daynumber == 6)
    printf("Saturday\n");

}

}
4

3 に答える 3

1

これ

(((13*m - 1)/5) + d + y + (y/4) + (c/4) - 2*c)

おそらくマイナスになるでしょう。% 7wouldの結果は依然として負であり、何も出力されません。

daynumber = (daynumber + 7) % 7;行の後に追加するだけです

daynumber = (((13*m - 1)/5) + d + y + (y/4) + (c/4) - 2*c) % 7;
于 2014-02-13T07:58:34.483 に答える
0

あなたが使用している:

 printf("Enter date: ddmmyyyy:\n");
 scanf("%d", &input);

ここでは、入力を int として保存しています。sizeof(int) が 2 バイトの場合、その範囲は-32,768 から 32,767の間になり、入力は範囲外になります。これには、 long intを使用する必要があります。

于 2014-02-13T06:55:47.810 に答える