while Schleife Problem



  • mach die Überprüfung mit boost.regex



  • Der Tobi schrieb:

    Sicher, das für jedes x im Wildcard auch in der Eingabe nur 1 Ziffer eingegeben wird/werden soll?

    Ich nehme an strE ist auch ein std::string ?

    Denk mal nach, was passiert, wenn man es beim ersten mal richtig eingibt? Dann muss man es nochmal eingeben, ist das der Sinn?

    using namespace std;
    int main()
    {
        std::string strE;
        cin >> strE;
    
        while ((strE[1] != '.') || (strE[3] != '.') || (strE[5] != '.'))
        {
                if (strE[1] != '.') cout << "1 passt nicht\n";
                if (strE[3] != '.') cout << "3 passt nicht\n";
                if (strE[5] != '.') cout << "5 passt nicht\n";
                cin >> strE;
        }
        cout << "alles passt.";
    }
    

    So wolltest du es doch sicher. Aber was passiert jetzt, wenn ich "1.2.3." eingebe?

    hmm ich habe glaub die lösung, es ist nicht nur ein problem wenn ich 1.2.3. eingebe sondern das problem liegt darin wenn ich 1.2 eingebe dann kennt er strE[5] nicht und knallt nen Speicherfehler raus. was ja klar ist. aber das im eifer des programmierens gleich erkennen ist immer schwer für mich blindfisch.

    x soll nur eine zahl sein.

    ich hab das jetzt so gemacht

    if(strE.size() < 7 && (!strE.size()>7)){
    while ((strE[1] != '.') || (strE[3] != '.') || (strE[5] != '.'))
        {
                if (strE[1] != '.') cout << "1 passt nicht\n";
                if (strE[3] != '.') cout << "3 passt nicht\n";
                if (strE[5] != '.') cout << "5 passt nicht\n";
                cin >> strE;
        }
        cout << "alles passt.";
    }
    else
    {
    cout << "einge ist zu lang oder zu kurz";
    }
    

    des passt soweit schon ist nur ein internes kleine proggy



  • überdenke diese Bedingung doch nochmal in Ruhe...

    if(strE.size() < 7 && (!strE.size()>7))
    


  • haha

    if (strE.size() == 7) 😛 😛 😛

    mal eine frage zu while schleifen,

    wenn ich sage:

    while( getchar() != 'w')
    

    dann wartet die schleife auf die eingabe.

    ich hätte jetzt gern das die whileschleife endlos was macht, bis ich etwas eingebe.



  • Schau dir mal kbhit() aus der conio.h (non-standard) an.



  • danke 🙂

    jetzt würde ich noch gern die schleife langsamer laufen lassen. im internet liest man ganz schön viel aber irgendwie eine gute lösung hab ich nicht gefunden.

    sleep(...) ist nix weil er dann auch keine key`s annimmt.



  • acadc schrieb:

    sleep(...) ist nix weil er dann auch keine key`s annimmt.

    Huh? Wieso das? Dann machst du vermutlich was falsch. Mit kbhit prüfen, ob eine Taste gedrückt wurde, und mit getch das Zeichen abholen. Ich glaube, ein sleep/Sleep stört da nicht. Zeig mal her, wie du es gelöst hast.



  • while(1) 
    	{
    
             if( GetAsyncKeyState(0x57)) break; // 0x57 == enter 
    
             // tu etwas
    
             Sleep(1000);
             system("CLS");
    
            }
    

    wenn ich die sleeptime erhöhe, wirds natürlich schlimmer



  • also so wie ich das sehe, muss ich wohl multitasking hier machen wenn ich das so möchte oder? weil ich kann die if abfrage nur davor oder danach machen.

    oder ich glaub ich steh absolut auf dme schlauch 😞



  • Du nimmst ja auch die falsche Funktion. GetAsyncKeyState gibt dir an, ob eine Taste zum Zeitpunkt des Aufrufs der Funktion gedrückt ist. Wenn gerade dein Sleep läuft, du die Taste drückst und sie später wieder loslässt, bevor GetAsyncKeyState aufgerufen wird, hast du verloren. kbhit sagt dir hingegen, ob eine Taste gedrückt wurde. Wenn das der Fall ist, liegt das entsprechende Zeichen im Puffer und darf von dir mit getch abgeholt werden.

    Grobes Beispiel:

    while(true) { //ohne Warnung: for(;;)
      //mache was
      Sleep(1000);
      if(kbhit()) {
        char c=getch();
        //verarbeite den Tastendruck
      }
    }
    


  • vielen dank für deine antwort 🙂
    zum glück gibt es menschen wie dich, die für ab und zu mal ein "danke" anderen helfen.

    was meinst du mit ohne Warunung? (//ohne Warnung: for(;;))



  • Damit meinte er, dass du auch die angegebene Alternative nehmen kannst, damit du die Compiler-Warnung "die Bedingung ist konstant" oder so nicht bekommst.



  • danke 🙂

    was muss ich einbinden damit ich kbhit() und getch() benutzen kann? des kennt der nämlich mal wieder nicht 🙂



  • Da empfehle ich dir mal, immer nach der Funktion zu googeln und nach dem einzubindenden Header zu schauen. Wenn du auf http://www.cplusplus.com landest, dann bist immer auf der sicheren Seite. In diesem Fall ist es "conio.h" (glaube ich..).



  • Genau, conio.h. Hatte ich auch schon auf Seite 1 erwähnt. 🙂


Anmelden zum Antworten