While Schleife beenden



  • Wie unterbreche ich folgende Schleife?
    Welche Tastenkombination muss ich verwenden?

    int value;
    while(cin >> value)
    {
    // wie sonst auch
    }
    


  • Unter Windows Strg+Z oder Strg+C glaub ich.



  • Oder du gibst einfach etwas ein, dass kein Integer ist 😉



  • Wenn ich STRG+ C drücke wird eine Exception ausgeworfen und mein Programm wird mit einer Fehlermeldung beendet.
    Beim drücken der STRG+Z Taste erhalte ich die Meldung "Debug Assertion Failed!".
    Gibt es eventuell noch andere Möglichkeiten?



  • glaube es geht auch mit "break"... also z.B. so:

    while(1)
    {
    
      x++;
      std::cout << x << std::endl;
    
      //Nach 100 durchläufen break;
      if(x>100)
      {
        break;
      }
    
    }
    

    denke müsste funktionieren...
    kanns leider gerade nicht testen keinen compiler zuhand...

    lg



  • sry hab die frage nicht richtig gelesen, es ging ja nur um ne tastenkombi... 🙂
    dachte "oder mit code" 😃 ...

    bei mir ist das immer strg + c 😉 ...



  • Strg+D schickt das Signal "End of Transmission" und sollte cin dazu bringen, einen Wert kompatibel zu false zurückzuliefern.

    Edit: Sehe gerade, unter Windows ist es Strg+Z, wurde also schon genannt. Welches OS bzw. welches Terminal-Programm benutzt du?



  • CommunityH5 schrieb:

    Beim drücken der STRG+Z Taste erhalte ich die Meldung "Debug Assertion Failed!".

    Das liegt dann vermutlich an dem Code, der nach der Schleife kommt. Ein Debugger kann dir mehr sagen ...



  • Ja, du hast recht das liegt am folgenden Code

    #include <iostream>
    #include <algorithm>
    #include <list>
    #include <vector>
    #include <iterator>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    	vector<int> VectorInt;
    	int value;
    	while (cin >> value)
    		VectorInt.push_back(value);
    
    	for (auto v : VectorInt)
    		std::cout << v << " ";
    
    	std::cout << std::endl;
    	list<int> ListInts;
    	copy(VectorInt.cbegin(), VectorInt.cend(), ListInts.begin()); // Fehler
    	/*ListInts.assign(VectorInt.begin(), VectorInt.end()); Lösung 2 */ 
    	for (auto v : ListInts)
    		std::cout << v << " ";
    
    	cout << "\nEnde Erreicht." << endl;
    	system("pause");
    }
    

    Wie kann ich den fehler beheben?



  • list<int> ListInts(VectorInt.cbegin(), VectorInt.cend());
    


  • Und wenn ich den Copy Alg. verwenden muss?



  • Es gibt std::back_inserter , der sich ein Iterator verhält. Den kannste als 3. Argument in std::copy verwenden.



  • Vielen Dank.

    Wie mir scheint gibt es immer mehrere Möglichkeiten für eine Aufgabe, woher weiß ich nun welche die richtige ist, gibt es überhaupt die richtige Methode oder sind alle gleich?



  • Viele Wege führen nach Rom. Oft macht es keinen Unterschied, welchen du nimmst.



  • CommunityH5 schrieb:

    Wie mir scheint gibt es immer mehrere Möglichkeiten für eine Aufgabe,

    Jo, meistens so um die 5 Hauptvarianten. Das Abschätzen, welcher Weg am meisten taugt, ist eine Kunst für sich. Da gibt es keinen bekannten Zugang außer ganz ganz viel Erfahrung sammeln.

    CommunityH5 schrieb:

    woher weiß ich nun welche die richtige ist,

    Wenn man sich beim Lesen des Codes langweilt, weil er so einfach ist, dann war's richtig.

    CommunityH5 schrieb:

    gibt es überhaupt die richtige Methode oder sind alle gleich?

    Oft gibt es 1 oder 2 Methoden, die herausragend besser sind als alles andere, aber untereinander gleichwertig.


Anmelden zum Antworten