1

C で 1 か月のカレンダーを作成しようとしています。このコード機能しますが、一部の入力では間隔がずれています。私はそれを修正する方法がよくわかりません。

また、これより少ないコードで 1 か月のカレンダーを作成する方法があれば、それは素晴らしいことです。テストでは約 1 時間でこれを吐き出さなければならないからです。

ありがとう!

int main() {

    int spaces, days_in_month, day_of_week, i;

    printf("Please enter the numier of days in the month:\n");
    scanf("%d", &days_in_month);

    printf("Please enter starting day of the week:\n");
    scanf("%d", &day_of_week);

    spaces = day_of_week - 1;

    printf("Here's your calendar:\n");

    for (i=0; i<spaces; i++)
        printf("   ");


    for (i=1; i<=(7-spaces); i++)
        printf("  %d", i);

    printf("\n");

    if ((i-spaces) >10 && (i-spaces) < 14-spaces)
        printf("   ");

    for (i=(8-spaces); i<=(10-spaces); i++)
        printf("  %d", i);
    for (i=(11-spaces); i<=(14-spaces); i++)
        printf(" %d", i);

    printf("\n");

    for (i=(15-spaces); i<=(21-spaces); i++)
        printf(" %d", i);

    printf("\n");

    for (i=(22-spaces); i<=(28-spaces); i++)
        printf(" %d", i);

    printf("\n");

    for (i=(29-spaces); i<=days_in_month; i++)
        printf(" %d", i);

    return 0;

}
4

3 に答える 3

3

%2d代わりに使用し%d、日付が 1 ~ 9 の場合、printf はスペースを挿入します。

于 2013-02-15T17:10:26.010 に答える
2

テストはどうでしたか?

これにアプローチする簡単な方法の1つを次に示します(入力検証を無視します)。

// Normalize day of week to be 0-6 rather than 1-7.
day_of_week -= 1;

// Pad the first line of the calendar.
for(i = 0; i < day_of_week; i++)
    printf("   ");

// For each day in the month...
for(i = 1; i <= days_in_month; i++)
{
    // Print the date for the current day_of_week.
    // '%3d' will print the value padding with spaces if necessary such that
    // at least 3 characters are written.
    printf("%3d", i);

    // Increment the day_of_week.
    // The modulo operator '% 7' will cause day_of_week to wrap around to 0
    // when day_of_week reaches 7.
    day_of_week = (day_of_week + 1) % 7;

    // if the new day_of_week is 0, output a newline to start at the
    // beginning of the next line.
    if(day_of_week == 0)
        printf("\n");
}

サンプル実行では、次の出力が生成されます。

$ ./calendar.exe 
Please enter the numier of days in the month:
28
Please enter starting day of the week:
6
Here's your calendar:
                 1  2
  3  4  5  6  7  8  9
 10 11 12 13 14 15 16
 17 18 19 20 21 22 23
 24 25 26 27 28
于 2013-02-15T19:19:33.503 に答える
1
#include<stdio.h>

int main(void)
{
    int start_day, days_in_month, i, day_of_week;

    printf("Enter start day: ");
    scanf("%d", &start_day);

    printf("Enter days in month: ");
    scanf("%d", &days_in_month);

    for(i = 1 ; i < start_day; i++) {
        printf("   ");
    }

    for(i = 1; i <= days_in_month; i++) {
        printf("%2d ", i);
        if((i + start_day - 1)%7 ==0) {
            printf("\n");
        }
    }
    return 0;
}
于 2015-07-13T17:02:04.843 に答える