while-Schleife wird gestoppt



  • Hallo Leute,

    ich habe ein Problem mit einer while-Schleife.

    Sie wird immer gestoppt, wenn sie bei cin angekommen ist.

    Ich würde es gerne so machen, dass die Schleife nicht stoppt und erst bei cin

    stoppt, wenn auch zuvor etwas eingegeben wurde.

    Ist dies auf einem einfachen Wege möglich?

    Grüße



  • Ja, das ist auf einfachem Weg möglich. Zeige am besten mal deinen Code, dann kann dir gezielt geholfen werden.



  • #include <iostream>
    #include <string>
    #include <cstdlib>
    #include <windows.h>
    int main()
    {
    
       while(ca > 0)
       {
         mo = mo + de * qu;
    	 ca = ca - de;
    	 cda = "0";
    	 std::cin >> cda;  //Soll geändert werden
    
    	 //Text
    
    		}    
    
       }
    
    	return 0;
    }
    

    Dies ist der Code.
    Und ja, es soll ein Spiel sein.
    Ich bin auch noch relativ jung und möchte das Spiel für mich und meine Freunde machen.



  • @theta

    Für die Antwort hätte man den Quellcode garnicht gebraucht.

    cin stoppt immer so lange bis eine Eingabe kommt.
    Wenn man dies nicht will, verwendet man Funktionen wie z.B.: GetChar.



  • Ok, das ist ja schonmal gut, aber GetChar() liest nur einen Ziffer ein,
    und desswegen reagiert mein anderer Text nicht. Geht das auch mit Strings?
    Also Quasi eine GetString() Funktion?

    EDIT: Aber bitte für Anfänger erklären und am besten ein beispiel geben.

    Danke



  • Hat niemand eine Idee?
    Ich habe es schon mit Getline() ausprobiert, funktioniert aber auch nicht.



  • ...



  • Das ist echt Krass!

    Ich danke dir für deine Mühe, aber ich verstehe da echt nur Bahnhof.
    Kannst du da vielleicht auskommentieren?

    Wenn ich den QC aber so ausführe, bekomme ich nen Haufen an Fehlern.
    Ich bin (noch) nicht so talentiert im programmieren.
    Und wo muss das ganze hin? An den Anfang, oder genau da, wo der Benutzer
    den string eingeben soll?

    Trotzdem danke, dass sich mal jemand mein Problem ansieht.



  • ...



  • Das ist nichtmehr das vollständige Programm. Ich wollte nicht dass alle das sehen, sondern nur den notwendigen Teil.

    Ich brauche eigentlich nur eine Cin Funktion, die nicht wartet auf eine Benutzereingabe, sondern einfach weitermacht, wenn noch nichts eingegeben wurde.
    Bitte eine klare Funktion für meine Frage mit Erklärung posten, ich verstehe das Fachchinesisch noch nicht.

    Das sind meine Fehlermeldungen:

    c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(9): error C2473: "max_x": Sieht wie eine Funktionsdefinition aus, weist jedoch keine Parameterliste auf.
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(9): error C2059: Syntaxfehler: 'Konstante'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(9): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(9): error C2238: Unerwartete(s) Token vor ';'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(10): error C2470: "max_y": Sieht wie eine Funktionsdefinition aus, es ist aber keine Parameterliste vorhanden; sichtbarer Funktionstext wird übersprungen.
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(17): error C2059: Syntaxfehler: 'public'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(18): error C2062: 'short'-Typ unerwartet
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(19): error C2470: "pos": Sieht wie eine Funktionsdefinition aus, es ist aber keine Parameterliste vorhanden; sichtbarer Funktionstext wird übersprungen.
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(19): error C2059: Syntaxfehler: ','
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(19): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(19): error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(19): error C2059: Syntaxfehler: ','
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(20): error C2143: Syntaxfehler: Es fehlt ';' vor '{'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(20): error C2447: '{': Funktionsheader fehlt - Parameterliste im alten Stil?
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(31): error C2065: 'max_x': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(33): error C2065: 'max_y': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(41): error C2059: Syntaxfehler: '}'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(41): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(41): error C2059: Syntaxfehler: '}'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(43): error C2039: 'output_handle': Ist kein Element von 'point_t'
    1>          c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(8): Siehe Deklaration von 'point_t'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(43): error C2470: "output_handle": Sieht wie eine Funktionsdefinition aus, es ist aber keine Parameterliste vorhanden; sichtbarer Funktionstext wird übersprungen.
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(50): error C2601: 'point': Lokale Funktionsdefinitionen sind unzulässig
    1>          c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(46): Diese Zeile enthält eine '{', die keine Entsprechung hat
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(50): error C2143: Syntaxfehler: Es fehlt ';' vor '}'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(52): error C2143: Syntaxfehler: Es fehlt ')' vor ';'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(52): error C2143: Syntaxfehler: Es fehlt ';' vor ')'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(52): error C2143: Syntaxfehler: Es fehlt ';' vor ')'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(52): error C2059: Syntaxfehler: ')'
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(56): error C2065: 'ch': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(58): error C2065: 'str': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(59): error C2065: 'str': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(59): error C2228: Links von ".resize" muss sich eine Klasse/Struktur/Union befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(61): error C2065: 'str': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(61): error C2065: 'ch': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(64): error C2065: 'point': nichtdeklarierter Bezeichner
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(64): error C2228: Links von ".move" muss sich eine Klasse/Struktur/Union befinden.
    1>          Typ ist ''unknown-type''
    1>c:\users\jan\documents\visual studio 2010\projects\test\test\form.cpp(67): fatal error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.
    


  • ...



  • Tut mir leid, es funktioniert immernoch nicht.
    Wenn ich Enter drücke, wird das was ich geschrieben habe angezeigt, aber der weitere Code wird nicht ausgeführt.

    Kann man das vllt so machen? :

    while()
    {
    	while()
    		{
    		 //rechnungen mit str
    	    }
    
    	while()
    	{
    		//cin str
    	}
    }
    

    So sollten doch beide Schleifen ausgeführt werden. Oder?



  • ...



  • Von was?

    Von meiner neuen Idee oder von deinem Lösungsvorschlag?



  • Hallo,
    Swordfish hat dir doch schon die Lösung verraten, du musst nur eine Kleinigkeit ändern;-)

    #include <iostream> 
    #include <string> 
    #include <conio.h>
    #include <windows.h> 
    using namespace std; 
    
    int main() 
    {
        std::string str; 
        char ch; 
    
        for( ;; ) {
    	    cout<<"h"; Sleep(100); //mache was...
    //-----------------------------------------------
    
        	if(_kbhit() ) { 
                if( ( ch = _getch() ) == '\r' ) { 
    
                    std::cout << str << '\n'; 
                    str.resize( 0 ); 
    
                } else str += ch; 
            } 
    
    //-----------------------------------------------
    
           //Oder mache hier was...
    
        } 
        return 0; 
    }
    

    Die if-Verzweigung ist der entscheidende Teil, der Rest dient nur zur Demonstration.
    Das Programm läuft die ganze Zeit (es gibt "h" aus, Sleep damit es nicht zu schnell ist, mein Einfallsreichtum 😃 ) ohne auf deine Eingabe zu warten, wenn du etwas eingibst wird es registriert und mit Enter eben ausgegeben.
    Ich schätze mal das war dein Anliegen?
    LG John.



  • Ja, es funktioniert!
    Zumindest halbwegs.
    Über sleep kann ich jetzt die geschwindigkeit regeln.
    Es gibt nur noch ein paar Bugs.
    Danke John1! Youre the Best, Around!

    Ein Dankesvideo!
    https://www.youtube.com/watch?v=E-WHW-QNswE


Log in to reply