Probleme beim C-Programm



  • Hallo an alle,

    ich bin Student an einer FH und habe am Donnerstag ein Praktikumstermin. Ich habe folgendes Programm.

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    char eingabe;
    int i;
    char wortliste [10][30];
    do
    {
    printf("\n1. Woerter eingeben\n");
    printf("2. Woerter ausgeben\n");
    printf("3. Programm beenden\n");
    printf("\nBitte waehlen Sie einen Menuepunkt aus: ");

    do
    {
    scanf("%c",&eingabe);
    }
    while (getchar() != '\n');

    switch (eingabe)
    {
    case '1': printf("\n-> Menuepunkt 1 ausgewaehlt <-\n");
    printf("\nBitte geben Sie Ihr Wort ein (max.10 Woerter): \n");
    printf("( q = Eingabe beenden)\n");
    for(i=0; i<=9; i++)
    {
    do
    {
    printf("%2dtes Wort eingeben: ",i+1);
    scanf("%s",wortliste[i]);
    }
    while(getchar() != '\n');
    if (wortliste[i][0]=='q'&&wortliste[i][1]=='\0')
    {
    wortliste[i][0]=' ';
    break;
    }
    }
    break;
    case '2': printf("\n-> Menuepunkt 2 ausgewaehlt <-\n");
    printf("\nIhre ausgegebenen Woerter lauten: \n");
    for(i=0; i<=9; i++)
    {
    printf("%2dtes Wort ist: %s\n",i+1,wortliste[i]);
    }
    if (wortliste[i][0]=='q')
    {
    wortliste[i][0]=' ';
    break;
    }
    break;
    case '3': printf("\n-> Programm wird beendet <-\n"); break;
    default: printf("\nFalsche Eingabe!\n");
    }
    }
    while (eingabe != '3');
    }

    Es ist ein Menüprogramm. Man kann 3.Menüpunkte auswählen. Beim Menüpunkt 1 soll man max. 10 Wörter eingeben können. Das Programm macht das auch. Im Menüpunkt 2 sollen die eingegebenen Wörter in umgekehrter Reihenfolge ausgegeben werden. Die Aufgabenstellung lautet so:
    Menüpunkt 2 soll über eine while-Schleife alle von Ihnen zuvor eingelesenen Wörter untereinander in umgekehrter Reihenfolge zur Eingabe ausgeben.
    In meinem Programm gibt er Wörter aus, aber in der normalen Reihenfolge und nicht in umgekehrter Reihenfolge. Ich weiß nicht wie ich das mit der while-Schleife machen soll.
    Es gibt noch eine andere Sache. Mit dem Zeichen q soll man die Wörtereingabe abbrechen können. Das Programm macht das auch. Das Problem liegt bei der Ausgabe. Zum Beispiel gebe ich nach dem 6.Wort q ein, dann bricht er die Wörtereingabe ab (so wie es muss). Bei der Wörterausgabe soll er die Wörter ausgeben (in umgekehrter Reihenfolge), die ich bis zum q eingeben habe. Die ersten 5.Wörter gibt er mir in normaler Reihenfolge aus. Und dann sieht das bei mir so aus:

    7.tes Wort ist:
    8.tes Wort ist:
    9.tes Wort ist:
    10.tes Wort ist:

    Der Professor sagte zu mir, dass die Zeilen nach der Eingabe von q nicht mehr in der Ausgabe auftauchen dürfen. Das heißt die Zeilen müssten nach dem q gelöscht werden. Ich weiß nicht, wie man die übrigen Zeilen löschen kann.
    Ich habe viel versucht und ausprobiert, bin leider nicht auf die richtige Lösung gekommen. Am Donnerstag habe ich den nächsten Praktikumtermin. Ich hoffe, dass ich die Problemstellung deutlich gemacht habe. Falls noch was unklar sein sollte, einfach schreiben. Wenn jemand die richtige Lösung weiß, könnte er bitte den richtigen Quellcode hochladen? Oder zumindest bitte erklären wie ich das machen soll.

    Das wäre sehr nett und sehr hilfreich.

    Vielen Dank



  • Auf die schnelle Fallen mir zwei Möglichkeiten ein.

    Erstens: Du zählst mit, wie viele Worte Du bis zum q eingelesen hast und gibst dann die Wörter ab diesem bis zum "nullten" Wort aus.

    Oder Du sorgst dafür, dass Deine 10 Strings alle dem leeren String entsprechen und gibst den String nur aus wenn seine Länge > 0 ist.
    Dazu initialisierst Du das Array beim erstellen:

    char wortliste [10][30] = { {0} }; // 10 leere cstrings ""
    // ist zwar nur eine 0, aber C garantiert, dass fehlende Werte auch "genullt" werden
    

    und checkst dann bei der Ausgabe mit strlen() aus <string.h> .



  • Du musst dir merken, wieviel Wörter du eingelesen hast.
    (Er steckt ja schon in einer Variablen)



  • Hallo nochmal,

    vielen Dank für eure Hilfe. Ich habe die Lösung gefunden. Ich werde meine Lösung die Tage hochladen.

    Nochmals
    Vielen Dank



  • Hier ist die Lösung zu der Aufgabe.

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    char eingabe;
    int i;
    char wortliste [10][30];
    do
    {
    printf("\n1. Woerter eingeben\n");
    printf("2. Woerter ausgeben\n");
    printf("3. Programm beenden\n");
    printf("\nBitte waehlen Sie einen Menuepunkt aus: ");

    do
    {
    scanf("%c",&eingabe);
    }
    while (getchar() != '\n');

    switch (eingabe)
    {
    case '1': printf("\n-> Menuepunkt 1 ausgewaehlt <-\n");
    printf("\nBitte geben Sie Ihr Wort ein (max.10 Woerter): \n");
    printf("( q = Eingabe beenden)\n");
    memset(wortliste, 0, sizeof(wortliste));
    for(i=0; i<=9; i++)
    {
    do
    {
    printf("%2dtes Wort eingeben: ",i+1);
    scanf("%s",wortliste[i]);
    }
    while(getchar() != '\n');
    if (wortliste[i][0]=='q'&&wortliste[i][1]=='\0')
    {
    wortliste[i][0]='\0';
    break;
    }
    }
    break;
    case '2': printf("\n-> Menuepunkt 2 ausgewaehlt <-\n");
    printf("\nIhre ausgegebenen Woerter lauten: \n");

    int n = 9;
    while (n > 0 && wortliste[n][0] == '\0')
    {
    n --;
    }

    for(i=n; i>=0; i--)
    {
    printf("%2dtes Wort ist: %s\n",i+1,wortliste[i]);
    }

    break;
    case '3': printf("\n-> Programm wird beendet <-\n"); break;
    default: printf("\nFalsche Eingabe!\n");
    }
    }
    while (eingabe != '3');
    }

    Nochmals danke für eure Mühe.



  • Du hast eine sehr umständliche Art gewählt für

    n = i - 1; // ungetestet
    

    Denn mehr macht deine while-Schleife nach int n = 9; nicht. (Hättest du Code-Tags genommen, gäbs auch Zeilennummern.)



  • Vielen Dank für deinen Tipp Dirk.


Anmelden zum Antworten