这是我迄今为止所做的。
#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
有谁能告诉我哪里错了?我是编程新手,所以如果你能用更简单的方式写答案我会很感激。非常感谢你!
答案 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);