tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
393
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    zorro2711 zorro2711 ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    12
    hallo ronny mein name und ich bin ein anfänger in sachen c++,
    ich habe ein programm geschrieben und wenn ich 'n' drück wo ich ins namens menü komme komme ich aus der schleife nicht mehr raus
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    
    #include <iostream>
    #include <conio.h>
    #include <cstdlib>
    #include <string>
     
    using namespace std;
    //variable
    void name2();
     
    //prototypen
    char noname[30];
     
    int main()
    {
        
     
     
        char Menü;
    do
        {
    cout<<"\n\n\n\n\n\n\n\n\t\t\t<S>piel Starten\n\t\t\t<N>ame deines Helden\n\t\t\t<O>tionen\n\t\t\t<B>eenden des Spieles\n\n\t\t\t";
        
        
        cin>>Menü;
    switch (Menü)
    {   
        case ('s'):
        case ('S'):
        {
            cout<<"Spiel Startet jetzt";
            cout<<endl<< noname;  
            //es sollte eigenlich ein name stehn (oder text) wenn nicht vorher in knotenpunkt name ein name steht 
        
     
        }break;
     
        case ('o'):
        case ('O'):
        {
            cout<<"Optionen";
        
        }break;
        
        case ('N'):
        case ('n'):
            {
     
        getchar();   //warum muss das da Rein?
     
          name2();
     
            }
        break;
     
        case ('B'):
        case ('b'):
        {
            cout<<"Spiel Beendet jetzt";
        
        }break;
        
        default: 
            {
     
            }break;
     
        }
     
    }while ( Menü != 'b' &&  Menü != 'B');
     
     
     
    system("pause");
    return 0;
    }
     
    void name2 ()
    {
         char ch; 
     
        do 
        { 
          
        cout<<"dein name ist ?";
        cin.get (noname,30); 
        cout<<"ist dein name "<<noname<< " ?  \n <J>a oder <N>nein\n";
          
        cin.get(ch);
        cin.clear();
        
     
     
        }while (ch != 'j' && ch != 'J'); 
     
     
     
    }
     

  2. #2
    XTicTacX XTicTacX ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    10
    Hey,

    also ich weiß nicht ich bin jetzt auch nicht der beste C++-Programmierer, aber du liest eine variable cin.get(ch) ein und leerst sie dann wieder mit cin.clear() oder lieg ich da falsch? Weil wenn das stimmt, bleibt er ja in der Schleife weil J oder j nie in der Variable ist

    mfg
     
    Gebe niemals auf und überarbeite deinen Code immer und immer wieder ;) - C++ das ganze Leben lang :)

  3. #3
    ibafluss ibafluss ist offline Mitglied Gold
    Registriert seit
    Feb 2011
    Beiträge
    168
    Nein, cin.clear() macht etwas anderes, es leert den Fehlerstrom von cin.

    Das Problem ist, wenn du mit cin.get (noname, 30); etwas einliest und die Eingabe mit ENTER abschließt, bleibt das ENTER (\n) im Eingabepuffer von cin. Wenn jetzt im Code cin.get (ch) kommt, wird das \n aus dem Eingabepuffer in ch kopiert, und es findet gar keine Eingabeaufforderung für den Benutzer statt. Du hast deshalb in ch immer das \n gespeichert.

    Um das zu umgehen, mach einfach 2 cin.get (ch).
     

  4. #4
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Hi,
    ich habe deinen Code jetzt nur überflogen, aber ich würde dir dringend empfehlen keine Umlaute in Variablen zu nutzen. Wird der Code im switch bei dir denn ausgeführt? Sonst lasst dir mal dein ch mit cout ausgeben, damit du siehst was wirklich drinnen steckt.
    Grüße
     
    Was soll daran kompliziert sein? Es muss doch nur ein Rad bewegt werden, man kann aufsteigen, es kommt die Matschhütte und durch den Regenbogen gelangst du zum hungrigen Affen, der Affenschwanz wird gezogen und bums kommst du zum Paradispark.

  5. #5
    XTicTacX XTicTacX ist offline Mitglied
    Registriert seit
    Dec 2011
    Beiträge
    10
    Zitat Zitat von ibafluss Beitrag anzeigen
    Nein, cin.clear() macht etwas anderes, es leert den Fehlerstrom von cin.
    Ahh ... ok gut zu wissen Dann denke ich ist deine Lösung richtig

    mfg
     
    Gebe niemals auf und überarbeite deinen Code immer und immer wieder ;) - C++ das ganze Leben lang :)

  6. #6
    Avatar von Muepe32
    Muepe32 Muepe32 ist offline Mitglied Brokat
    Registriert seit
    Mar 2011
    Beiträge
    353
    Zitat Zitat von ibafluss Beitrag anzeigen
    Um das zu umgehen, mach einfach 2 cin.get (ch).
    Dann gebe ich einfach 31 Zeichen ein und drücke dann Enter. Dann sind wir wieder am gleichen Ort wie vorher.

    Zum Thema clear:
    ios::clear macht nichts anderes als das Fehlerbit auf einen Wert (Default: goodbit) zu setzen. Effektiv macht das also eigentlich gar nichts.

    Die Variante, die dich optimal auf die nächste Benutzereingabe vorbereitet ist folgende:
    Code cpp:
    1
    
    std::cin.sync();

    Mit istream::sync werden im Eingabestrom alle noch nicht gelesenen Zeichen rausgeworfen und du kannst die neue Eingabe empfangen.
     
    Viele Tutorials und Artikel zur Programmierung unter Windows mit C++ und C#. Tägliche Updates und Antworten auf eure Fragen:
    Win32Easy - Blog
    Es würde mich freuen, wenn ihr einen Kommentar postet!

Ähnliche Themen

  1. Wie komme ich aus dieser Schleife raus?
    Von hiltwin im Forum PHP
    Antworten: 3
    Letzter Beitrag: 11.10.07, 13:56
  2. Rein & Raus
    Von Blinda im Forum Photoshop
    Antworten: 5
    Letzter Beitrag: 23.12.03, 13:18
  3. Wie krieg ich das raus?
    Von derPicknicker im Forum Photoshop
    Antworten: 5
    Letzter Beitrag: 04.11.03, 00:35
  4. Photoshop7 is ja nu raus...
    Von pong im Forum Photoshop
    Antworten: 8
    Letzter Beitrag: 27.02.02, 13:39