2016-11-03 8 views
2

Das ist, was ich bisher getan habe.Ich versuche, einen Kalender zu drucken, aber ich konnte mein Ergebnis nicht ausgerichtet

#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; 

} 

Das ist mein Ergebnis: result

Kann mir jemand sagen, wo falsch? Ich bin neu in der Programmierung, also werde ich es zu schätzen wissen, wenn Sie die Antworten einfacher schreiben können. Ich danke dir sehr!

+1

Was scheint das Problem zu sein? –

+0

BTW, müssen Sie ein '\ n' nach der Formatzeichenfolge in' printf hinzufügen ("Geben Sie den Starttag der Woche ein (1 = So, 2 = Mo, ......, 7 = Sa):") ; ' –

+0

Wird es nicht direkt in die neue Zeile springen, wenn ich den Scanf benutze? Das Problem ist, dass ich mein Ergebnis nicht ausrichten konnte ... – Alex

Antwort

1

Statt

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

Verwendung

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

dann statt

printf(" "); 

Verwendung

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

und statt

printf("%3d", j); 

Verwendung

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

Ich habe getan, wie Sie gesagt haben, und es ist Arbeit !!! Vielen, vielen Dank! * ★, ° * :. ☆ \ (¯ ▽ ¯)/$: *. ° ★ * – Alex

+0

Gern geschehen. – MarianD

0

Fast richtig. Eine korrekte Version ist:

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; 
} 

Sie brauchen nicht i in der Schleife zu erhöhen, und man musste die Ausgabe allign.

Ausgang:

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 
+0

Ich bemerke nur das Inkrement, danke, dass du auf mich aufmerksam gemacht hast !!! – Alex

0

jeden Tag Nummer muss in der gleichen Breite (4 Spalten), so dass die print-Anweisung gedruckt werden sollte wie

printf("%4.4d", j); 

suchen, die alle Zahlen haben 1 Platz nach rechts.

Diese

1) fügen Sie ein Leerzeichen am Anfang der wörtlich auf zweierlei Weise korrigiert werden kann, dass die Spaltenüberschriften (meine Präferenz ausdruckt)

oder

2) überprüfen, um zu sehen, Wenn es sich um den ersten Eintrag in einer Zeile handelt und eine ähnliche Ausdruckanweisung verwendet wird, nur für diesen ersten Eintrag:

Verwandte Themen