Forum

Einloggen | Registrieren | RSS  

silent_max(R)

E-Mail

25.03.2012,
13:05
(editiert von silent_max
am 25.03.2012 um 13:07)
 

Keine Ausgabe bei While-Schleife (Elektronik)

Hallo liebe Gemeinde.

Ich habe folgenden Quellcode geschrieben:

#include <iostream>
using namespace std;

int main()
{
double e=0.123456789;

while (e!=0.123456789)
{
int first_Number, second_Number;
cout << "Bitte eine grosse Zahl eingeben: ";
cin >> first_Number;
cout << "nBitte eine kleinere Zahl eingeben: ";
cin >> second_Number;

if (first_Number > second_Number)
cout << "nDanke!n";
else
cout << "nDie zweite Zahl ist groesser!";

return 0;
}
}

Die Ausgabe sieht wie folgt aus:





Was habe ich falsch gemacht?

Vielen Dank im Voraus für die Antworten.

Gruß

Max

--
Where is the madness ...

Torsten(R)

E-Mail

25.03.2012,
13:24
(editiert von Torsten
am 25.03.2012 um 13:25)


@ silent_max

Keine Ausgabe bei While-Schleife

» Was habe ich falsch gemacht?

Keine Ahnung, wir wissen ja nicht, was Du eigentlich erreichen willst.

Die while-Schleife wird natürlich kein einziges Mal durchlaufen, da die Bedingung nicht erfüllt ist. Andererseits würdest Du sonst auch nie wieder aus der while-Schleife rauskommen, weil die Variable e nie geändert wird.

Wofür brauchst Du die Variable e überhaupt?

Gruß
Torsten

silent_max(R)

E-Mail

25.03.2012,
13:39

@ Torsten

Was ich mache will

» » Was habe ich falsch gemacht?
»
» Keine Ahnung, wir wissen ja nicht, was Du eigentlich erreichen willst.
»
» Die while-Schleife wird natürlich kein einziges Mal durchlaufen, da die
» Bedingung nicht erfüllt ist. Andererseits würdest Du sonst auch nie wieder
» aus der while-Schleife rauskommen, weil die Variable e nie geändert wird.
»
» Wofür brauchst Du die Variable e überhaupt?

Die Schleife soll solange laufen, bis 0.123456789 gedrückt wird

--
Where is the madness ...

hws(R)

E-Mail

59425 Unna,
25.03.2012,
14:02

@ silent_max

Keine Ausgabe bei While-Schleife

» Was habe ich falsch gemacht?
»
vermutlich, dass du noch nicht gemerkt hast, dass man Programme auch im Single Step ablaufen lassen kann.
Man kann die Variablen anschauen und sieht, welche Anweisung als nächste ausgeführt wird.
Dann merkt man, an welcher Stelle der Rechner das macht, was man ihm gesagt hat (und nicht das, was man eigentlich wollte! :-D )

» double e=0.123456789; *hier wid e=0,123 zugewiesen
»
» while (e!=0.123456789) * Bedingung nicht erfüllt
» { ... return 0; * Schleife wird nicht ausgeführt
» } Ende der Schleife
» } * ende des Programms


Das Programm führt die while Schleife nicht aus, weil Bedingung nicht erfüllt und dann ist das Programm zu Ende.

Nirgendwo wird e verändert, oder gab es noch eine große Schleife drumrum, die das komplette "Main" Programm aufrief und evtl an e rumfummelte?

Deine nächsten Schritte sollten also sein: Bei der Compilerversion nachsehen, wie man den Einzelschrittmodus aktiviert und wie man den aktuellen Wert der Variablen an der Stelle dann feststellt.

hws

silent_max(R)

E-Mail

25.03.2012,
14:16
(editiert von silent_max
am 25.03.2012 um 14:22)


@ hws

Keine Ausgabe bei While-Schleife

Ursprünglicher Code:

[cpp]
#include <iostream>
using namespace std;

int main()
{

int first_Number, second_Number;
cout << "Bitte eine grosse Zahl eingeben: ";
cin >> first_Number;
cout << "nBitte eine kleinere Zahl eingeben: ";
cin >> second_Number;

if (first_Number > second_Number)
cout << "nDanke!n";
else
cout << "nDie zweite Zahl ist groesser!";

return 0;
}
[/cpp]

Ursprüngliche Ausgabe:





Dazu habe ich dann folgendes programmiert:

[cpp]

#include <iostream>
using namespace std;

int main()
{

int first_Number, second_Number;
cout << "Bitte eine grosse Zahl eingeben: ";
cin >> first_Number;
cout << "nBitte eine kleinere Zahl eingeben: ";
cin >> second_Number;
cout << "Zahl fuer e eingeben: " ;
double e;
cin >> e;

while(e!=0.123456789)
{
if (first_Number > second_Number)
cout << "nDanke!n";
else
cout << "nDie zweite Zahl ist groesser!";
}


return 0;
}
[/cpp]

Wenn ich aber jetzt beispielsweise

->für first_Number 5000 und für secon_Number 2500 eingebe, dann kommt endlos "Danke!".

->für first_Number 2500 und für second_Number 5000 eingeben, dann kommt endlos "Die zweite Zahl ist groesser!"

--
Where is the madness ...

hws(R)

E-Mail

59425 Unna,
25.03.2012,
14:38

@ silent_max

Keine Ausgabe bei While-Schleife

Warum liest und beherzigst du nicht, was ich schreibe.
Sonst kann ich mir die Antwort auch sparen.
LASS DAS PROGRAMM IM SINGLE STEP ABLAUFEN!

» Dazu habe ich dann folgendes programmiert:
»
Anfangs liest du first_Number und second_Number ein und dein e.

Dann kommt eine Schleife mit der Bedingung (e!=0.123456789) und dort wird auf größer kleiner verglichen und etwas ausgegeben.

Diese Schleife ab dem while.. bis zu return 0 wird nun solange ausgeführt, wie (e!=0.123456789) ist.
Und da du innerhalb der Schleife keine Chance mehr hast, das e zu ändern, läuft die unendlich.

du musst deine Anweisung
» cin >> e;
INNERHALB der Schleife wiederholen.
Bzw deine Eingaben am Anfang des MAIN INNERHALB DER SCHLEIFE VERLEGEN:

Und jetzt probies mal endlich mit Single Step, dann fällt dir der Fehler auf.

hws

BernhardB(R)

Berlin,
25.03.2012,
14:39
(editiert von BernhardB
am 25.03.2012 um 14:40)


@ silent_max

Keine Ausgabe bei While-Schleife

» Wenn ich aber jetzt beispielsweise
»
» ->für first_Number 5000 und für secon_Number 2500 eingebe, dann kommt
» endlos "Danke!".
»
» ->für first_Number 2500 und für second_Number 5000 eingeben, dann kommt
» endlos "Die zweite Zahl ist groesser!"

Hi,

wie @hws schon schrieb, sind Computer nicht besonders kreativ: sie machen nicht das, was Du willst, sondern das, was Du ihnen sagst.

Edit: Schneller war er jetzt auch noch.

Deine while- Schleife ist die klassische Endlosschleife- die Eintrittsbedingung ist "e ist ungleich irgendwas", in der Schleife wird e nicht verändert. Es passiert ganz exakt das, was Du beschreibst.

Gruß
Bernhard

geralds(R)

Homepage E-Mail

Wien, AT,
26.03.2012,
09:03
(editiert von geralds
am 26.03.2012 um 09:04)


@ silent_max

Was ich mache will

---
» »
» » Wofür brauchst Du die Variable e überhaupt?
»
» Die Schleife soll solange laufen, bis 0.123456789 gedrückt wird

---
wie meinst du das?
wer oder was soll die 0.123456789 drücken?
durch die Eingabe? ... hm??
was meinst mit "drücken"?
beschreibe das bitte näher.

Vorschlag:
Zum Üben von Schleifen verwende keine Zahlen mit
Kommastellen, nur ganze Zahlen.

grüße
gerald
---

--
...und täglich grüßt der PC:
"Drück' ENTER! :wink: Feigling!"