Monatskalender in C
-
Schreibe ein Programm, das einen Monatskalender der folgenden Form ausgibt:
Mo 7 14 21 28
Di 1 8 15 22 29
Mi 2 9 16 23 30
Do 3 10 17 24
Fr 4 11 18 25
Sa 5 12 19 26
So 6 13 20 27Eingabe: Wochentag, auf den der Erste fällt, Taganzahl des Monats
Ausgabe: MonatskalenderSo weit bin ich gerade:
#include <stdio.h> #include <conio.h> void ausgabe (int tag, int anzahl); void main(){ int tag, anzahl,wdh; do{ system("cls"); printf("Geben sie den ersten Tag des Monats ein (Mo=1,Di=2,...So=7): "); scanf("%d",&tag); fflush(stdin); while(tag<1 || tag>7){ printf("\nGeben sie einen gueltigen Tag ein: "); scanf("%d",&tag); fflush(stdin); } printf("\nGeben sie die Anzahl des Monats ein: "); scanf("%d",&anzahl); fflush(stdin); while(anzahl<28 || anzahl>31){ printf("\nGeben sie eine gueltige Tagesanzahl ein: "); scanf("%d",&anzahl); fflush(stdin); } ausgabe (tag,anzahl); printf("\nWollen sie das Programm Wiederholen? Druecken sie 1 oder 0"); wdh=getch(); }while(wdh=='1'); } void ausgabe (int tag, int anzahl){ int i, tag2, n=2-tag; for(i=0; i<7; i++){ if(n>0) printf("%d",n); else printf(" "); tag2=n+7; while(tag2<=anzahl){ if(tag2<10) printf(" "); printf(" %d",tag2); tag2+=7; } printf("\n"); n++; } }
Doch jetzt hänge ich bei der Ausgabe von den Wochentagen vor dem eigentlichen Kalender
Habt ihr eine Idee wie ich die Wochentage ausgeben kann, ohne dass sich der Kalender verschiebt?
-
lel456 schrieb:
Habt ihr eine Idee wie ich die Wochentage ausgeben kann, ohne dass sich der Kalender verschiebt?
/* ... */ void ausgabe (int tag, int anzahl){ int i, tag2, n=2-tag; char const * tagesnamen[] = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; for(i=0; i<7; i++){ printf( "%s ", tagesnamen[ i ] ); /* ... */
Sonst:
Main muss laut Standard einenint
zurückgeben. Eine leere Parameterliste beimain()
?? Ernsthaft?
<conio.h>
undgetch()
ist kein Standard-C.
system()
ist so ziemlich immer die mieseste Art irgendwas zu machen. Und wenn schon ... `<stdlib.h> fehlt dafür.[c]fflush()
ist für Inputstreams wie
stdinundefiniert. Darf dir auch eine Pizza bestellen oder den Rechner abfackeln. Die Fehlerbehandlung bei der Eingabe geht eleganter. Vielleicht fallen dir bessere Variablennamen als
tag,
tag2,
nund
iein? Die
while()in
ausgabe()schreit förmlich nach
for(). Das Inkrement von
nam Ende der
for()` will dringend in den Schleifenkopf.
-
Man könnte ein Array mit 7 Zeilen und 6 Spalten anlegen und zunächst spaltenweise mit den Tageszahlen befüllen und dabei in der dem Wochentag entsprechenden Zeile in der ersten Spalte aufsetzen sowie nicht benötigte Elemante am Anfang und Ende auf 0 setzen. Anschliessend erfolgt die zeilenweise Ausgabe mit dem Namen des Wochentags und den jeweiligen Werten der 6 Spalten, wobei statt der 0 einfach Leerzeichen ausgegeben werden.
-
Danke, hat alles super funktioniert, aber könntest du mir noch sagen was der * vor tagesnamen genau bewirkt?
Zum anderen:
Bis jetzt schreiben wir immer main(), da wir noch nichts anderes gelernt haben. Ebenso wie <conio.h> und getch();
Zu den Variablennamen werde ich mir noch Gedanken machen und das restliche habe ich schon verändert.Danke für die schnelle Hilfe
-
Swordfish schrieb:
Eine leere Parameterliste bei
main()
?? Ernsthaft?Warum nicht? Willste profilacktisch Parameter annehmen und sie nicht verwenden oder willste profilacktisch dafür sorgen, dass du die main selber nicht mit falschen Argumenten aufrufen kannst?
-
lel456 schrieb:
..., aber könntest du mir noch sagen was der * vor tagesnamen genau bewirkt?
tagesnamen ist ein Array von Pointern auf
char
Du könntest auch
char tagesnamen[][3] = { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" };
machen.
Das ist nicht dasselbe, verhält sich aber für dich gleich.
(Auch bei der Ausgabe brauchst du nur einen Index angeben)
-
volkard schrieb:
Swordfish schrieb:
Eine leere Parameterliste bei
main()
?? Ernsthaft?Warum nicht?
Warum schon? . o O (ähm ... wir sind im C-Board ... leere Parameterliste ... *hint, *hint )
volkard schrieb:
Willste profilacktisch Parameter annehmen und sie nicht verwenden oder willste profilacktisch dafür sorgen, dass du die main selber nicht mit falschen Argumenten aufrufen kannst?
Wie bitte?
-
Swordfish schrieb:
volkard schrieb:
Swordfish schrieb:
Eine leere Parameterliste bei
main()
?? Ernsthaft?Warum nicht?
Warum schon? . o O (ähm ... wir sind im C-Board ... leere Parameterliste ... *hint, *hint )
Ich denke, volkard weiß wie C funktioniert. Du verstehst bloß seinen Hinweis nicht.
-
SeppJ schrieb:
Du verstehst bloß seinen Hinweis nicht.
Ja, dacht ich mir:
Swordfish schrieb:
Wie bitte?
Meinte er: "Halt doch bitte endlich einfach mal die Klappe!"?
-
Swordfish schrieb:
Meinte er: "Halt doch bitte endlich einfach mal die Klappe!"?
Vielleicht auch. Oder zumindest vorher etwas länger nachdenken, dann kannst du gerne so viel reden, wie du willst
.
-
SeppJ schrieb:
Swordfish schrieb:
Meinte er: "Halt doch bitte endlich einfach mal die Klappe!"?
Vielleicht auch. [...]
Gut. Offenbar teilst du die Meinung auch. Werd' die Klappe halten.
-
Swordfish schrieb:
SeppJ schrieb:
Swordfish schrieb:
Meinte er: "Halt doch bitte endlich einfach mal die Klappe!"?
Vielleicht auch. [...]
Gut. Offenbar teilst du die Meinung auch. Werd' die Klappe halten.
Mit dem "auch" meinte ich was volkard vielleicht noch neben der Primäraussage seines Beitrags sagen wollte.
Wobei ich aber durchaus besorgt feststellen muss, dass du die letzten 1-2 Tage ziemlich viele weniger gute Beiträge verfasst hast.
-
Da ich noch nie wirklich gute Beiträge verfasst habe:
Swordfish schrieb:
Werd' die Klappe halten.
// fühl Dich natürlich völlig frei besagte Kacke zu löschen.