Problem mit While Schleife d;



  • wozu? vor der ersten abfrage mittels while wird ihr mit cin >> d; ein wert zugewiesen.
    aber wenn es dich glücklich macht, kannst du auch einen startwert für d festlegen.



  • "Sollte" war nicht das richtige Wort 😃
    Hab mal wo gelesen,dass es besser ist, der Variable nen Anfangswert zu geben, der dazu passt. In dem Fall also 0 oder 1. Aber auch 2,3,4,.. kann man zuweisen.
    Naja war unnötig, dass ich so einen Mist geschrieben hab^^



  • Hallo

    Ich will noch einen kurzen nachtrag machen.

    Das Listing von Circa konnte aus 2 Gründen nicht funktionieren:
    1. Die Variable "d" war nicht deklariert, wie schon bemerkt wurde.
    2. Eine do-while Schleife hat folgenden Syntax:

    do
    {
    // Auzuführender Code
    }
    while();
    

    Circa hat das Semikolon nach dem while() vergessen.

    Ich persöhnlich würde auch die Varaiable "radius" noch vor der do-while Schleife deklarieren, aber es wird auch so funktionieren.

    mfg

    Sputnik



  • Und da schon angemerkt wurde, dass initialisierte Variablen zumindest netter aussehen als welche, denen erst Zeilen Spaeter ein gueltiger Wert zugewiesen wird, kann man die Schleife auch gleich in ein etwas gewohnteres Format umstricken:

    int d = 1;
    while(d == 1) {
      //...
    }
    

    und wenn man auch noch sparsam mit dem stack bzw. mit der Lebensdauer von Hilfsvariablen (wie z.B. d) sein moechte geht auch folgendes

    for (int d = 1; d==1;)
    {
      //...
    }
    


  • damit verschleierst du in beiden fällen, was der op eigentlich machen wollte... sein code schreit förmlich nach einer do-while-schleife. das muss man nicht mit dem äquivalenten hilfskontrukt mittels einer while-schleife kaschieren.



  • nuja, das ist denke ich mal hauptsaechlich Geschmacksfrage. Man koennte auch argumentieren, dass dieses schoene Programm am besten fuer immer laeuft und nur bei Eingabe von 2 einfach abbricht. Dann saehe das so aus:

    for (;;) //for ever... wer will kann auch while(1) oder while(true) oder sowas nutzen
    {
    //...
    
    int d;
    cin << d;
    if (d == 2) return 0;
    }
    

    Was betont, dass dies eine Endlosschleife sein soll/kann.
    Es gibt Leute, die argumentieren, dass von vornherein klar sein muss, dass eine Abbruchbedingung erreicht wird. Das ist hier nicht unbedingt der Fall...

    Wie gesagt, alles Geschmackssache



  • okay das funkt jetzt aber... irgendwie... wiederholt er es nicht wenn man 1 eintippt.....

    Hier:

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	float radius;
    	int d;
    
    	do
    	{
    	cout << "Geben Sie den Radius ein\n";
    	cin >> radius;
    	cout << "Der Umfang beträgt:"<<2*3.14*radius<<endl;
    	cout << "Moechten Sie noch etwas ausrechnen?(1=Ja)(2=Nein)\n\n";
    	cin >> d;
    	}
    	while(d==1);
    	return 0;
    }
    


  • Also bei mir funktioniert das.

    Vieleicht vergessen neu zu kompilieren? Oder vorher mal speichern und dann kompilieren. Sowas kann durch aus mal vorkommen 🙂



  • Ich wird dass so machen

    do
    {
    ...
    }while(d!=1);
    ----
    Also stat == ein !=,dass Funktioniert.



  • statt
    }while(d==1);
    lieber
    }while(d=!1);
    , das funktioniert.( 😉 😉 )


Anmelden zum Antworten