while(true)



  • Hallo,

    ich habe vorher einen Tip bekommen mit einer While(True) Schleife die Ausführung eines Codes abzubrechen.

    Ich habe es so versucht:

    #include <iostream> 
    #include <string> // STL 
    
    using namespace std; 
    
    int main() 
    
    { 
      string s; 
      string Eingabe;
      cout << "Enter your name: "; 
      cin >> s; 
    
      cout << "Welcome to C++, " << s << endl; 
    
    //
    while (true)    //Endlos 
    { 
    //... Anweisungen 
        cin >> Eingabe; 
        if (Eingabe=='e') break;    //Wenn e eingeben wird, beenden 
    } 
    
    }
    

    Leider bekomme ich immer die Fehlermeldung in der Zeile "if (Eingabe......".
    Die Fehlermeldung ist:

    in function `int main()`:
    no match for `operator==`in `Eingabe ==`e"

    Was mache ich denn falsch??

    Grüße

    Andreas



  • dürfte klappen wenn du anstatt 'e' -> "e" verwendest.
    'e' ist nen char und kein string ....

    noch was ... mit den unkontrolierten ausstiegen solltest du es besser lassen!
    wenn du später große rojekte machst wird das sehr schnell unübersichtlich und du kannst nicht mehr nachvollziehen wo evtl fehler sind.
    gibt nur einige wenige situationen in denen das sinn macht.... vor allem wenn es auf extreme optimierung ankommt !

    Eingabe = "\0";
    while (Eingabe != "e")    
    {
    //... Anweisungen
        cin >> Eingabe;
    }
    


  • Probier mal "e" statt 'e'.



  • Hallo,

    die if ist falsch du fergleicht string mit char

    if (Eingabe=="e") break;
    

    MFG TaccoGo



  • Vielen Dank an alle. Funktioniert!

    @Ulath:

    Das ist doch nun ein kontrollierter Ausstieg oder nicht? Kannst Du mir ein Buch empfehlen, das du selber benutzen würderst?? Das Buch von Erlenkoetter (www.erlenkoetter.de) beschreibt Dinge, die ihr immer "verflucht". z.B.: ".h" usw....

    😋

    Grüße



  • Andreas Feiner schrieb:

    Das ist doch nun ein kontrollierter Ausstieg oder nicht?

    Ja, ist es. Aber

    while (true)    //Endlos 
    { 
    //... Anweisungen 
        cin >> Eingabe; 
        if (Eingabe=='e') break;    //Wenn e eingeben wird, beenden 
    }
    

    ist ein schönes Beispiel, um eine do...while Schleife sinnvoll einzusetzen.

    Andreas Feiner schrieb:

    Das Buch von Erlenkoetter (www.erlenkoetter.de) beschreibt Dinge, die ihr immer "verflucht". z.B.: ".h" usw....

    Es geht nicht darum, was wir bevorzugen oder nicht. Es geht darum, was vom Standard vorgeschrieben wird. Und da werden alte Header (zB iostream.h) als "deprecated" eingestuft, also missbilligt. Was einfach soviel bedeutet, dass deren Benutzung falsch ist ist. Du kannst natürlich auch programmieren ohne dich an den Standard zu halten, dann bewegst du dich aber auf Pfaden jenseits von gut und böse. Wenn du eigene Header-Dateien erstellst, verbietet dir der Standard jedenfalls nicht, die Endung .h zu verwenden.



  • groovemaster schrieb:

    Wenn du eigene Header-Dateien erstellst, verbietet dir der Standard jedenfalls nicht, die Endung .h zu verwenden.

    Betont er nicht sogar im Gegenteil, daß Header-Dateien ohne Endung ausschließlich für die Standardbibliothek sind?



  • ulath schrieb:

    Eingabe = "\0";
    

    Warum nicht gleich

    Eingabe = "\0\0\0\0\0\0\0\0\0\0\0\0";
    

    vielleicht hält es dann noch besser...


Anmelden zum Antworten