Stundenplan programmieren

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
xSpawn
Beiträge: 4
Registriert: Do Mär 24, 2011 2:58 pm

Stundenplan programmieren

Beitrag von xSpawn » Di Mär 29, 2011 2:34 pm

Hey Leute,

ich hab ein simples Problem beim Programmieren eines "Stundenplanes". Man soll die Möglichkeit haben desn Stundenplan anzuschauen, zu editieren, oder das Programm zu schließen. Nun, mein Problem liegt beim Einlesen / Editieren.

Hier mal der ganze Code:

Code: Alles auswählen

#include <stdio.h>

int progStart;

int main()
{

  printf("\n\nStundenplan v0.1\n\n");
  printf("Drücken Sie \n<1> Um den Stundenplan anzuzeigen \n<2> Stundenplan zu Schreiben / Ändern \n<3> Schliessen\n");
  scanf("%d", &progStart);

  switch(progStart)
  {

    case 1: break;
            return 0;
    
    case 2: ;FILE *fp;
            fp = fopen("zzStundenplan.txt", "w");

            char Mo[13], Di[13], Mi[13], Do[13], Fr[13];
            int i, j;

            for (i = 0; i <= 10; i = i + 2)
            {
              printf("Geben sie die Stunden für Montag nach der Reihe ein: ");
              scanf("%s", &Mo[i]);

            }

            for (i = 0, j = 1; j <= 6, i <=10; j = j + 1, i = i + 2)
            {
              printf("%d Stunde: %.2s \n", j, &Mo[i]);

            }

            for (i = 0; i <= 11; i += 1)
            {
              fputc(Mo[i], fp);
            }

            //fputc('\n', fp);
            //fputc('a', fp);
            break;

            return 0;

    case 3: printf("Programm wird geschlossen.");

            return 0;

} 

}
Also, ihr seht, dass ich beim einlesen der verschiedenen Tage ein Array verwende. Im Prinzip ist der Code

Code: Alles auswählen

            for (i = 0; i <= 10; i = i + 2)
            {
              printf("Geben sie die Stunden für Montag nach der Reihe ein: ");
              scanf("%s", &Mo[i]);

            }

            for (i = 0, j = 1; j <= 6, i <=10; j = j + 1, i = i + 2)
            {
              printf("%d Stunde: %.2s \n", j, &Mo[i]);

            }

            for (i = 0; i <= 11; i += 1)
            {
              fputc(Mo[i], fp);
            }
für jeden Tag gleich, es unterscheidet sich nur in den Arrays und dem Wort Montag. Jetzt will ich nicht den Sourcecode verdreifachen, nur weil ich ein paar Variablen verändern müsste. Hat jemad eine Ahnung wie man das Problem lösen könnte?

Thanks in Advance ;)

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Stundenplan programmieren

Beitrag von Dirty Oerti » Di Mär 29, 2011 2:55 pm

Tag :)
Um deine Frage mal als erstes zu klären:
xSpawn hat geschrieben: für jeden Tag gleich, es unterscheidet sich nur in den Arrays und dem Wort Montag. Jetzt will ich nicht den Sourcecode verdreifachen, nur weil ich ein paar Variablen verändern müsste. Hat jemad eine Ahnung wie man das Problem lösen könnte?
Ja, hier, ich ;)
Und zwar könntest du deine Arrays in ein Array packen ;)
Genauso kannst du dir ein Array aus C-Strings anlegen, in dem die C-Strings Montag, Dienstag, ... in der richtigen Reihenfolge enthalten sind.
Dann kannst du durch diese beiden Arrays (am besten mit einer) Zählvariablen iterieren und musst so keinen Code doppelt schreiben.

Soweit.

Gut, dann zu dem Code, den du da gepostet hast:

Code: Alles auswählen

            char Mo[13], Di[13], Mi[13], Do[13], Fr[13]; //******************1
            int i, j; //********************2

            for (i = 0; i <= 10; i = i + 2)
            {
              printf("Geben sie die Stunden für Montag nach der Reihe ein: ");
              scanf("%s", &Mo[i]); //****************************1b

            }
Ich denke nicht, dass das das ist, was du erreichen willst :)
Montag möchtest du ja mehrere Stunden eintragen können, richtig?
Ein Eintrag solch einer Stunde besteht aus einem String? Oder soll so ein Eintrag nur aus 1 Zeichen bestehen?
Sprich heißt es "Deutsch" oder einfach nur "D" ?
Wenn du nämlich einen kompletten String willst, dann ist das oben nicht richtig:

char Mo[13] ist ein Array mit 13 char Elementen.
Wenn du ein Array mit 13 "C-String-Elementen" haben willst, sollte das so in etwa aussehen:
char * Mo[13]
Wobei du hierbei natürlich Speicher für die einzelnen Strings reservieren müsstest.
Einfacher:
char Mo[20] [13]
So hast du ein Array mit 13 Elementen, jedes vom Typ char [20], sprich jedes Element ist wieder ein Array.
(Wenn du obige Vereinfachung durchführst könntest du hierbei rauskommen: char Stunde[20] [13] [5] (für 5 Tage) )

Warum ich denke, dass du komplette Strings möchtest? Siehe 1b, du liest einen String ein, und NICHT ein einzelnes Zeichen.

Dann zu 2: Kann sein, dass ich deine Absicht dahinter nicht erkenne: Aber warum brauchst du 2 Zählvariablen?

Gut, soweit erstmal :)
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

xSpawn
Beiträge: 4
Registriert: Do Mär 24, 2011 2:58 pm

Re: Stundenplan programmieren

Beitrag von xSpawn » Di Mär 29, 2011 4:11 pm

Dirty Oerti hat geschrieben:Tag :)
Ja, hier, ich ;)
Und zwar könntest du deine Arrays in ein Array packen ;)
Genauso kannst du dir ein Array aus C-Strings anlegen, in dem die C-Strings Montag, Dienstag, ... in der richtigen Reihenfolge enthalten sind.
Dann kannst du durch diese beiden Arrays (am besten mit einer) Zählvariablen iterieren und musst so keinen Code doppelt schreiben.
An das hab ich auch schon gedacht, allerdings nur an ein eindimensionales Array, zu blöd ^^;
Dirty Oerti hat geschrieben: Gut, dann zu dem Code, den du da gepostet hast:
Ich denke nicht, dass das das ist, was du erreichen willst :)
Montag möchtest du ja mehrere Stunden eintragen können, richtig?
Ein Eintrag solch einer Stunde besteht aus einem String? Oder soll so ein Eintrag nur aus 1 Zeichen bestehen?
Sprich heißt es "Deutsch" oder einfach nur "D" ?
Wenn du nämlich einen kompletten String willst, dann ist das oben nicht richtig:
Zum einfacheren Auslesen sollten die Stunden zwei Stellen haben, also zum Beispiel DE od. DU für Deutsch. Deswegen hab ich gedacht 13 weil 6*2 + 1(\0). Beim nachrechnen kam aber 12 raus weil [0] ja mit zählt.
Dirty Oerti hat geschrieben:char Mo[13] ist ein Array mit 13 char Elementen.
Wenn du ein Array mit 13 "C-String-Elementen" haben willst, sollte das so in etwa aussehen:
char * Mo[13]
Versteh ich nicht so ganz. Ich kann ja alles schon einlesen und abspeichern. Wo liegt der Unterschied?
Dirty Oerti hat geschrieben:Wobei du hierbei natürlich Speicher für die einzelnen Strings reservieren müsstest.
Einfacher:
char Mo[20] [13]
So hast du ein Array mit 13 Elementen, jedes vom Typ char [20], sprich jedes Element ist wieder ein Array.
(Wenn du obige Vereinfachung durchführst könntest du hierbei rauskommen: char Stunde[20] [13] [5] (für 5 Tage) )

Warum ich denke, dass du komplette Strings möchtest? Siehe 1b, du liest einen String ein, und NICHT ein einzelnes Zeichen.
Hast Recht ;).
Dirty Oerti hat geschrieben:Dann zu 2: Kann sein, dass ich deine Absicht dahinter nicht erkenne: Aber warum brauchst du 2 Zählvariablen?
Hmm. Nur um die aktuelle Stunde anzeigen zu können. Siehe printf("%d Stunde: %.2s \n", j, &Mo); . Ich kann i ja nicht verwenden, weil i mit 2 hochgezählt wird.
Dirty Oerti hat geschrieben:Gut, soweit erstmal :)


Danke für die Antwort. Ich wollte schon den Ganzen Sourcecode neu schreiben, aber jetzt werde ich es nochmal so probieren.

Antworten