cout funktioniert nicht



  • Also ich benutze (wenn überhaupt) getch () um die Konsole geöffnet zu halten. Meinst du den Fehler, dass wait () nicht immer funktioniert, oder das kaum irgendwo erwähnt wird, dass das Fenster mit einer solchen Funktion geschloßen werden muss?

    Mfg Ominion



  • @Mikey: musst du auch eine solche wait funktion einbinden?

    Nur in ganz bestimmten Fällen, wenn ich z.B. eine Eingabe per getline () erwarte, davor muss der Eingabebuffer geleert werden ... Ansonsten sind in komplexeren Programmen immer irgendwelche Funktionen / Funktionsaufrufe ineinander verschachtelt, sodass es eigentlich nie zu einem Ende in diesem Sinne kommt. Wenn ich kleine Programme schreibe, und ich nicht möchte, dass sich das Konsolenfenster schließt, dann verwende ich meistens getchar (), nur befindet sich dann komischerweise nichts im Buffer, dass dann als Eingabe ausgewertet werden könnte ... Insofern ist diese wait () - Funktion nur bei so kleinen Programmen relevant. Noch was nebenbei: Du kennst doch sicherlich das Codesample "Jackpot", dort kommt es eig. auch nie zu einem Ende, sondern das Game läuft indirekt in einer Schleife, weswegen diese Methode entfällt !

    [EDIT]

    Also ich benutze (wenn überhaupt) getch () um die Konsole geöffnet zu halten.

    ich auch, wobei diese Methode nicht die vorbildlichste ist ...

    MfG mikey.



  • Ja Jackpot ist mir bekannt 😃

    Was empfehlt ihr mir, getchar() oder wait()??
    Was findet ihr besser, bzw zu was ratet ihr?

    grüße
    ziox.



  • Ja Jackpot ist mir bekannt

    Hrrrr, woher das wohl ... 😃

    Was empfehlt ihr mir, getchar() oder wait()??

    Also da sind wir ja an dem Problem angelangt, weswegen ich dir auch die wait () Funktion gegeben habe ... Generell ist getchar natürlich angebrachter, wobei es aber auch ganz klar den Nachteil mitsich bringt, dass es nicht immer hilft, da sich ja noch was im Eingabepuffer befinden könnte. Ich muss dir ganz ehrlich sagen, ich blicke bei dem bis heute noch nicht durch, und möchte dir auch keine großen Stories erzählen ...

    Also Faustregel: getchar ist vorzuziehen, und wenn das nicht klappt, dann nimm wait (); Alternativ dazu könntest du noch getch (); hernehmen, dazu musst du aber <conio.h> einbinden.

    MfG mikey.



  • hmmm er will doch das konsolenfenster offen bleibt, geht es dann nicht auch so ?
    oder hab ich etwas falsch verstanden 😞

    #include <iostream>
        using namespace std;
    
        int main()
        {
          int zahl1;
          int zahl2;
    
          cout << "Bitte eine Zahl eingeben" << endl;
          cin >> zahl1;
          cout << "Bitte noch eine Zahl eingeben" << endl;
          cin >> zahl2;
          cout << "Zahl 2: " << zahl2 << endl;
          cout << "Zahl 1: " << zahl1 << endl;
          [b]system("PAUSE");[/b]
          return 0;
        }
    


  • Wo kann ich denn(allgeein jetzt) nachsehen wie die Funktion getchar(); aussieht?
    Gibt es da eine Übersichtsseite hier im Forum oder so?
    Wäre nett wenn ihr mir das sagen könntet.

    Edit:

    hmmm er will doch das konsolenfenster offen bleibt, geht es dann nicht auch so ?
    oder hab ich etwas falsch verstanden

    Mit System("PAUSE"); geht es auch, allerdings hab ich schon öfters gehört und gelesen das das seh langsam sein soll.
    kP obs stimmt, deswegen frag ich ja hier 😃

    grüße
    ziox.



  • Die Funktion getchar () hat keine Parameter, falls du das meinst.

    Mfg Ominion



  • Ich weiß zwar nicht, was an obiger Codezeile so mysteriös ist, aber ich werd' versuchen, etwas Licht in die Sache zu bringen.

    std::cin.ignore(std::cin.rdbuf()->in_avail());
    

    Okay, gehen wir's von innen an. cin.rdbuf() liefert ein stringbuf* zurück. Dieses hat die (von streambuf geerbte) Methode in_avail() welche die Anzahl der Zeichen im Stream zurückgibt. Gut, eigentlich geht in_avail hin schaut erstmal, ob der Pointer auf das nächste zu lesende Element kleiner als der Pointer ist, der hinter das letzte Element des Streams zeigt. Wenn dem so ist, subtrahiert es die Position vom nächsten Element von der Position des Elements "hinter dem Ende des Streams" ( egptr() - gptr() ). Ansonsten wird showmanyc aufgerufen, welches per default null zurückgibt.

    ignore hingegen holt n Zeichen aus dem Stream und verwirft sie. Der Stream ist in dem Fall cin und n ist der Wert, den wir von in_avail() bekommen. Also die Anzahl der Zeichen, die momentan im Stream lesbar sind.

    Ach ja, wait ist klar besser, da man getchar ziemlich leicht überlisten kann, wenn zwei Sachen im Buffer stecken. Und von getch lässt man die Finger, weil die conio.h nicht überall vorhanden ist (hängt vom Compiler ab).

    MfG

    GPC



  • Mit System("PAUSE"); geht es auch, allerdings hab ich schon öfters gehört und gelesen das das seh langsam sein soll.
    kP obs stimmt, deswegen frag ich ja hier

    *duckundwegrenn* natürlich hast du Recht. Vergiss das system ("pause") lieber ...

    @GPC: Danke für die Erklärung, ich habe schon viele Tutorials durchgelesen, aber keiner lieferte diese Erklärung 🙂

    In Sachen getch (), das habe ich auch erwähnt, dass es wirklich die letzte Alternative sein sollte. Aber da unser Freund ja Dev-C++ hernimmt, konnte ich es ihm ruhig empfehlen, da getch () dort vorhanden ist ...

    MfG mikey.



  • Hallo!

    Ja, kann mir jemand sagen warum getchar(); hier nicht funktioniert:

    #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";
    getchar();
    }
    

    wie muss ich das denn richtig einbauen?
    grüße
    ziox.



  • -.- Ich hab dir ja nicht umsonst gesagt, dass getchar () sehr unsicher ist. In deinem Beispiel befindet sich nunmal was im Eingabepuffer, und somit kann getchar () nicht funktionieren, da es denkt, es wird etwas eingegeben. Hier musst du wait () vorziehen, sprich erst den Eingabepuffer leeren, und das machst du nun mit dieser Funktion 😉

    Um weitere Fragen zu klären: Nimm einfach den vorherigen Code, der mit wait ()

    MfG mikey.



  • aha..



  • hin.
    geht es dann?

    NEEEEIN, sag mal, willst du uns quälen, oder liest du die Beiträge nicht ? Nun wurde schon zweimal erklärt, dass man system ("pause") nicht hernehmen soll, und dass es völlig unnütz ist, da es viel bessere Alternativen gibt. Ich sag da nur wait () ...

    [EDIT] @ black_x: War nur gut gemeint 🙂


Anmelden zum Antworten