Endlosschleife wiedermal


  • Mod

    Lass dir doch mal start ausgeben. Ich wette, da kommt so etwas wie 'art' heraus.



  • (...)

    Verfuegbare Züge: 5

    Sind Ihre Angaben korrekt? Schreiben Sie 'start'!start
    startAlles klar! Starte Berechnung...

    das ist meine Terminalausgabe!



  • soll ich mein cout << start hinschreiben, damit es wirklich überprüft werden kann, eh direkt nach der eingabe? Ich steh grad voll auf der Leitung...



  • vor allem wenn ich das cin.ignore() weglass kann ich ja den string überhaupt nicht eigeben nicht mal beim ersten durchlauf

    ich glaub ich versteh schon mit jedem durchlauf schneidet er ein zeichen ab bis kein string mehr eigegeben werden kann oder ist das komplett falsch



  • aber wenns so ist wie lös ich das dann



  • cin.get und getline holen sich das '\n', mit dem du die Eingabe abschließt. Deshalb das ignore().

    Wenn die Schleife das 2te mal durchlaufen wird, fehlt aber das ignore() vor dem ersten get.
    Wenn du dein erstes ignore() in die do-while Schleife verschiebst, sollte das klappen.

    Prinipiell würdest Du vielleicht bessere Antworten bekommen, wenn Du dir die in diesem Fall wirklich kleine Mühe machen würdest und ein lauffähiges Programm postest.



  • Ja stimmt schon, ich dachte nur, dass das in diesem Fall vl gar nicht nötig sei, weil er ja doch recht lang ist. Ich werds mal so versuchen, sollte es nicht klappen poste ich den vollständigen Code. Hab erstmal vielen Dank für den Hinweis 🙂


  • Mod

    venezianer27 schrieb:

    Ja stimmt schon, ich dachte nur, dass das in diesem Fall vl gar nicht nötig sei, weil er ja doch recht lang ist. Ich werds mal so versuchen, sollte es nicht klappen poste ich den vollständigen Code. Hab erstmal vielen Dank für den Hinweis 🙂

    Vollständig ist weniger wichtig als lauffähig. Siehe:
    Wie man Probleme nachstellbar und nachvollziehbar macht
    Ich hatte jedenfalls wenig Lust, mir die Bahnhofsklasse und 20 weitere Variablen zu definieren, bevor ich deinen Code ausführen konnte, um das Problem nachzuvollziehen. Entsprechend litt die Qualität meiner Hilfestellung. Das trifft sicher nicht nur auf mich zu.



  • [code="cpp"]
    #include <iostream>
    #include <unistd.h>
    #include <fstream>
    #include <stdlib.h>
    #include <cmath>
    #include <string.h>

    using namespace std;

    int main()

    {

    ifstream infile;
    char continput;
    string start;
    string startok = "start";

    struct S_station
    {
    char name[14];
    int deptime; // z.b. 0600 f. 6 Uhr früh
    int passengerCount; // abhängig von eingegebener Tageszeit (dynamic)
    int avtrains;
    };

    S_station depstation;
    S_station deststation;

    sleep(5);

    cout << "Wollen Sie fuer eine weitere Strecke arbeiten? (J)a, (N)ein\n";

    cin >> continput; // char
    switch(continput)
    {
    case ('J'):
    {
    do
    {
    cin.ignore();
    cout << "Bitte waehlen Sie zunaechst Ihren Abfahrtsbahnhof: "; cin.get(depstation.name, 13);
    cout << "Abfahrtszeit: "; cin >> depstation.deptime;
    cout << "Wieviele Passagiere reisen um diese Zeit: "; cin >> depstation.passengerCount;
    cout << "Wieviele Züge stehen im Raum dieser Station zur Verfuegung? " ; cin >> depstation.avtrains;

    cin.ignore();

    cout << "Nun waehlen Sie bitte noch Ihren Zielbahnhof, an dem die Passagiere abgeliefert werden sollen: "; cin.get(deststation.name, 13);
    cout << "Ankunftszeit: "; cin >> deststation.deptime;
    cout << "Wieviele Passagiere reisen um diese Zeit zurueck: "; cin >> deststation.passengerCount;
    cout << "Wieviele Züge stehen im Raum dieser Station zur Verfuegung? (Für Rueckfahrt)" ; cin >> deststation.avtrains;

    cout << endl;

    cout << "Ihre eingegebenen Daten lauten:\n\n" << "Abfahrtsbahnhof Name: " << depstation.name << endl;
    cout << "Abfahrtszeit: " << depstation.deptime << "\n";
    cout << "Passagieranzahl: " << depstation.passengerCount << "\n";
    cout << "Verfuegbare Züge: " << depstation.avtrains; cout << "\n\n";

    cout << "Zielbahnhof Name: " << deststation.name << endl;
    cout << "Ankunftszeit: " << deststation.deptime << "\n";
    cout << "Passagieranzahl: " << deststation.passengerCount << "\n";
    cout << "Verfuegbare Züge: " << deststation.avtrains; cout << "\n\n";
    cin.ignore();

    cout << "Sind Ihre Angaben korrekt? Schreiben Sie 'start'!"; getline(cin, start); // Fehler programm durchläuft schleife dennoch!
    } while(start != startok);

    cout << "Alles klar! Starte Berechnung...\n"; sleep(3);

    } break;
    case('N')
    {
    cout << "Programm wird geschlossen!\n";
    }
    default:
    {
    cout << "Falsche Eingabe\n";
    }
    }
    return 0;
    }



  • Damit das kompiliert fehlt fehlt dem case ('N') ein Doppelpunkt.


Anmelden zum Antworten