我试图打印日历,但我无法将结果对齐

时间:2016-11-03 11:40:34

标签: c calendar

这是我迄今为止所做的。

#include<stdio.h>

int main()
{
int days, start, i, j;

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

printf("Enter starting day of the week (1=Sun, 2=Mon, ......, 7=Sat): ");
scanf("%d", &start);

printf("Sun Mon Tue Wed Thu Fri Sat\n");

for(i=0; i<(start-1); i++)
    printf("    ");

for(j=1; j<=days; j++){
    printf("%3d", j);

    if((j+i)%7==0)
        printf("\n");}

 printf("\n\n");

 return 0;

}

这是我的结果: result

有谁能告诉我哪里错了?我是编程新手,所以如果你能用更简单的方式写答案我会很感激。非常感谢你!

3 个答案:

答案 0 :(得分:1)

而不是

    printf("Sun Mon Tue Wed Thu Fri Sat\n");

使用

    printf("\n Sun Mon Tue Wed Thu Fri Sat\n");    // New line and an extra space

然后代替

    printf("    ");

使用

    printf("     ");                               // 5 spaces instead of 4

而不是

    printf("%3d", j);

使用

    printf("%4d", j);                              // 4 positions (1 for an extra space)

答案 1 :(得分:0)

几乎正确。正确的版本是:

int main(void)
{
    int days=30, start=3, i, j;

    printf("Sun Mon Tue Wed Thu Fri Sat\n");

    for(i=0; i<(start-1); i++)
        printf("    ");

    for(j=1; j<=days; j++){
        //i++;
        printf("%3d ", j);

        if((j+i)%7==0)
            printf("\n");
    }
     printf("\n\n");
     return 0;
}

您不需要在循环中增加i,您必须将输出对齐。

输出:

Sun Mon Tue Wed Thu Fri Sat
          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  29  30 

答案 2 :(得分:0)

每天的数字需要以相同的宽度打印(4列),因此print语句应该类似于

printf("%4.4d", j);

将右边的所有数字1个空格。

这可以通过两种方式纠正

1)在文字的开头插入一个空格,打印出列标题(我的偏好)

2)检查它是否是一行中的第一个条目并使用类似的print语句,仅用于第一个条目:

printf("%3,3d", j);