Programm wiederholen



  • Hallo.

    Erstmal danke für eure Antworten.

    Lagere deine Fachlichkeit in eine Funktion aus, die du dann in main() mit einer do-while Schleife entsprechend oft aufrufst.

    Versteh ich nicht so recht.... Mit Funktionen hab ich noch so meine Probleme. Meiner Meinung nach machen die das Programm viel komplizierter. Ich hab das, was ich geschrieben habe, einmal mit Funktionen geschrieben. Aber das sieht irgendwie falsch aus.

    Das '\n' von der Entertaste steht noch im Eingabestrom und wird mit getchar eingelesen.
    Dies muss erst entfernt werden.

    Ersetzte Zeile 29 durch
    C:
    scanf(" %c", &c); // c = getchar();
    Achte auf das Leerzeichen vor dem %

    Das funktioniert auch nicht. Dass die Entertaste noch im Puffer steckt, hat mich auf eine Idee gebracht, was ich im Tutorial gelernt habe.

    char c, temp;
    do
    {
    .
    .
    printf("\nNochmal? (j/n): ");
    scanf("%c%c", &c, &temp);
    } while(c == 'j');
    

    funktioniert auch nicht 😡 😡



  • Vielleicht hättest du die Fehlermeldung zeigen sollen 😕 😃

    Dann wären die Tipps besser 👍



  • f.-th. schrieb:

    Vielleicht hättest du die Fehlermeldung zeigen sollen 😕 😃

    Dann wären die Tipps besser 👍

    😃 😃

    Ja da hast du Recht. Bisher hatte ich aber noch nicht so gravierende Probleme, dass ich in den Logs nachschauen musste. Hab es aber jetzt gefunden.

    30:14: error: 'c' undeclared (first use in this function)
    
    30:14: note: each undeclared identifier is reported only once for each function it appears in
    

    Das klingt für mich, als wäre die Variable c nicht deklariert?!

    edit:

    Hmm... hab jetzt mal folgendes geändert (Zeile 10 und Zeile 28-30):

    #include<stdio.h>
    
    int main()
    
    {
    
        do
        {
        float BB, ante, spieler, chips;
        int c, temp;
    
        printf("---------------M-Rechner----------------");
    
        printf("\nBB: ");
        scanf("%f", &BB);
    
        printf("\nAnte: ");
        scanf("%f", &ante);
    
        printf("\nSpieler: ");
        scanf("%f", &spieler);
    
        printf("\nStack: ");
        scanf("%f", &chips);
    
        printf("\nM: %.3f", chips/(BB+0.5*BB+ante*spieler));
    
        printf("\nNochmal? (j oder n): \n");
        scanf("%c%c", &c, &temp);
        } while ('c' == 'j');
    
        return 0;
    }
    

    Das Programm kann jetzt ausgeführt und benutzt werden. Wenn ich allerdings bei der Frage 'Nochmal?' das 'j' eintippe und mit Enter bestätige, wird das Programm beendet... 😕



  • In c wird das '\n' eingelesen, und die Eingabe in temp. (Reihenfolge beachten)

    Zudem vergleichst du zwei Zeichen-Konstanten miteinander.
    Der Vergleich ist immer unwahr.
    Sollte aber der Compiler als Warnung anmeckern.
    Sieh mal genauer hin, was links vom == steht.

    %c erwartet übrigens einen Zeiger auf ein char , nicht auf ein int .
    getchar hingegen gibt ein int zurück.

    Vielleicht probierst du es doch noch mal mit meinem Vorachlag, denn:
    Das Leerzeichen im Formatstring weist scanf an, alle Whitespace (dazu gehört auch '\n') zu überlesen.



  • Shelldor schrieb:

    30:14: error: 'c' undeclared (first use in this function)
    
    30:14: note: each undeclared identifier is reported only once for each function it appears in
    

    Das klingt für mich, als wäre die Variable c nicht deklariert?!

    Beachte den Scope.
    c existiert nur innerhalb der do-while-Schleife.
    Der Test ist aber außerhalb.

    Definiere c (als char) in Zeile 6 und gut ist.



  • DirkB schrieb:

    Shelldor schrieb:

    30:14: error: 'c' undeclared (first use in this function)
    
    30:14: note: each undeclared identifier is reported only once for each function it appears in
    

    Das klingt für mich, als wäre die Variable c nicht deklariert?!

    Beachte den Scope.
    c existiert nur innerhalb der do-while-Schleife.
    Der Test ist aber außerhalb.

    Definiere c (als char) in Zeile 6 und gut ist.

    👍 👍 👍 💡

    Waaaaahnsinn!!! Das hat funktioniert wie du gesagt hast 🙂 Es lag tatsächlich daran, dass das c innerhalb der Schleife deklariert wurde.

    Ohhh man. ich bin so blöd 😞



  • 30:14: error: 'c' undeclared (first use in this function)
    

    Das bedeutet der Compiler kennt an dieser Stelle des Quelltextes 'c' nicht.
    Nun überlege mal warum das so ist. 😉



  • Okay, hast schon



  • DirkB schrieb:

    Beachte den Scope.
    c existiert nur innerhalb der do-while-Schleife.
    Der Test ist aber außerhalb.
    Definiere c (als char) in Zeile 6 und gut ist.

    Wäre auch meine erste Idee gewesen, aber: kann man in C überhaupt Variablen so definieren.
    Sorry hab's irgendwie vergessen, aber zweifle daran.



  • EOP schrieb:

    DirkB schrieb:

    Beachte den Scope.
    c existiert nur innerhalb der do-while-Schleife.
    Der Test ist aber außerhalb.
    Definiere c (als char) in Zeile 6 und gut ist.

    Wäre auch meine erste Idee gewesen, aber: kann man in C überhaupt Variablen so definieren.
    Sorry hab's irgendwie vergessen, aber zweifle daran.

    Seit kurzem (ca. 1999) geht das.



  • DirkB schrieb:

    Seit kurzem (ca. 1999) geht das.

    Huch, wie die Zeit vergeht. 😉



  • Shelldor schrieb:

    Das Programm kann jetzt ausgeführt und benutzt werden. Wenn ich allerdings bei der Frage 'Nochmal?' das 'j' eintippe und mit Enter bestätige, wird das Programm beendet... 😕

    logisch, in zeile 30 schreibst du ja auch 'c'=='j'. da das immer unwahr bzw. falsch ist, wird die schleife logischerweise auch abgebrochen. 😉


Anmelden zum Antworten