silent_max

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

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

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

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! )
» 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

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

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
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

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! Feigling!" |