-1

我正在尝试制作一个一个月的日历来打印最后一行天的总和。

这个输出对于日历是正确的,但是总和不断打印出它是 0。对于 3=day_of_week 和 30=days_in_month 的输入,总和应该是 26+27+28+29+30 = 140

谢谢。

int main() {

int day_of_week, days_in_month, i, row=1, array[31], sum=0, a;

printf("Enter the day of the week 1=sun, 2=mon, 3=tue, 4=wed, 5=thurs, 6=fri, 7=sat\n");
scanf("%d", &day_of_week);

printf("Enter the number of days in this month:\n");
scanf("%d", &days_in_month);

for (i=0; i<3*day_of_week; i++)
    printf(" ");

for (i=1; i<=days_in_month; i++) {

    printf("%3d", i);
    array[i] = i;

    day_of_week++;

    if (day_of_week%7==0){
        printf("\n");
    }

}
    printf("\n");
    for (a=days_in_month; a>=(days_in_month-(7-day_of_week)); a--)
        sum+=array[a];

printf("sum of last row is %d\n", sum);


return 0;

}

4

3 回答 3

1

你有

for (a=days_in_month; a>=(days_in_month-(7-day_of_week)); a--)

day_of_week不会在您的程序中保持不变,并且在此语句之前会发生更改:

day_of_week++;

使用第二个变量来增加并且不要修改day_of_weekafter scanf

于 2013-02-19T21:30:34.563 回答
1

这里有一个问题:

for (i=1; i<=days_in_month; i++) {

    printf("%3d", i);
    array[i] = i;

    day_of_week++;

    if (day_of_week%7==0){
        printf("\n");
    }

}

您允许day_of_week超出范围。您的代码期望该值不超过 7。此循环将导致该变量设置为用户输入的值加 ( days_in_month- 1)。在您的最后一个for循环中,该语句7 - day_of_week可能是否定的,这将丢弃您的其余代码。

当您测试变量模 7 并打印换行符时,您是在检查溢出。当你这样做时,也要设置day_of_week = 0

此外,(days_in_month-(7-day_of_week))一旦您从用户那里获得输入,就立即计算并将其存储在一个临时变量中。由于您在代码中操作这些变量,因此您的最终for循环可能没有使用您认为它正在使用的值。或者,不要修改用于用户输入的变量并创建其他变量以用作临时变量。

于 2013-02-19T21:35:35.080 回答
1

我不明白你为什么要这样做++day_of_week

这样的事情应该会更好:

int main()
{
    int day_of_week, days_in_month, i, row=1, array[31], sum=0, a;

    printf("Enter the day of the week 1=sun, 2=mon, 3=tue, 4=wed, 5=thurs, 6=fri,     7=sat\n");
    scanf("%d", &day_of_week);

    printf("Enter the number of days in this month:\n");
    scanf("%d", &days_in_month);

    for (i = 0; i < 3 * day_of_week; i++)
        printf(" ");
    for (i = 1; i <= days_in_month; i++)
    {
        printf("%3d", i);
        array[i] = i;
        if (i % 7 == 0)
            printf("\n");
    }
    printf("\n");
    for (a=days_in_month; a>=(days_in_month-(7-day_of_week)); a--)
        sum+=array[a];
    printf("sum of last row is %d\n", sum);
    return 0;
}
于 2013-02-19T21:35:37.783 回答