Fehler beim vermeiden von automatischem schliessen



  • Hallo zusammen
    ich habe neulich ein c++ Tutorial gefunden (http://tutorial.schornboeck.net/inhalt.htm)
    dort wird ein programm beschrieben, welches zwei Zahlen tauschen soll:

    #include<iostream>
    using namespace std;

    int main()
    {
    int zahl1;
    int zahl2;

    cout<<"Bitte eine Zahl eingeben\n";
    cin>>zahl1;
    cout<<"Bitte noch eine Zahl eingeben\n";
    cin>>zahl2;
    cout<<"Zahl 2: "<<zahl2<<"\n";
    cout<<"Zahl 1: "<<zahl1<<"\n";
    }

    ich habe auch noch

    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cin.get();

    hinzugefügt, (wie es im tutorial einmal steht) aber dass Programm schliesst sich dennoch automatisch nach der Zahleneingabe. 😕
    könnt ihr mir vieleicht sagen warum ?
    ( ich habe auch schon den ersteller des tutorials deswegen kontaktiert, aber keine Antwort bekommen

    freundliche grüsse Michi 13



  • Lern doch einfach mit der Konsole umzugehen, dann ist's kein Problem mehr.

    Auf jeden Fall solltest du den Code so liefern, wie du ihn kompiliert hast und das Ganze in [cpp]-Tags packen.



  • Wie meinst du mit der Konsole umzugehen ?
    Ich hab es so Kompiliert:

    #include<iostream>
        using namespace std;
    
        int main()
        {
          int zahl1;
          int zahl2;
    
          cout<<"Bitte eine Zahl eingeben\n";
          cin>>zahl1;
          cout<<"Bitte noch eine Zahl eingeben\n";
          cin>>zahl2;
          cout<<"Zahl 2: "<<zahl2<<"\n";
          cout<<"Zahl 1: "<<zahl1<<"\n";
          cin.clear(); 
          cin.ignore(cin.rdbuf()->in_avail());
          cin.get();
        }
    


  • cin.get();
    

    Wartet auf eine Eingabe...dazu kann noch kommen dass du vlt durch deine Entwicklungsumgebung automatisch eine "Bitte drücken Sie eine Taste"-Meldung bekommst;)



  • Hmm, koennte das Problem da an dem in_avail liegen? Hier im Forum hat man mir mal gesagt, das koenne Probleme versuchen Gab da ja irgendetwas a la numeric_limits das man da einfuegen sollte, weisz aber gerade nicht mehr, was es genau war.

    EDIT: mist, in der Konsolenfaq ist es auch noch damit angegeben...
    Ich glaub sowas wie

    cin.ignore(5787);
    

    koennte auch funktionnieren... Na, einer wird es sicher gleich richtig hierhin schreiben.



  • ignore() hat zwei Parameter (maximale Anzahl (Default 1) und letztes Zeichen (Default EOF)), die du im Ernstfall beide angeben mußt - mit cin.ignore(numeric_limits<streamsize>::max(),'\n'); solltest du auf jeden Fall auf der sicheren Seite sein.

    (in_avial() gibt laut Standard die Zeichenzahl im Stream-Buffer an. Aber für für cin muß das nicht unbedingt der Tastaturpuffer des Systems sein)



  • Ich wollte in meinem vorigen Beitrag eigentlich erst schreiben:
    "Aber CStoll wird das sicher gleich korrigieren", habe dann aber doch gezweifelt, lol. War da nicht irgendwas wie "Du sollst nicht zweifeln an deines Gottes Macht" oder so?


Anmelden zum Antworten