Variable übernimmt nicht das was sie soll
-
Hey Leute
Bin dabei C++ zu lernen und acker gerade ein Buch durch. Bin gerade bei Übungsaufgaben aber komme dort leider nicht weiter... und Lösungen gibt es dafür auch keine.
Also die Aufgabe ist:
Man soll Zahlen mit Werten wie cm, inch, m und ft eingeben.
Dann werden diese Werte in Meter umgerechnet.
Am Ende wird ausgegeben, was der bisher kleinste und bisher größte Wert war.val1 = kleinste Zahl
val2 = größte ZahlDas Programm funzt auch an sich wie es soll, nur mit der ersten Eingabe, sollen die double val1 und val2 auf den gleichen Wert x gesetzt werden, den ich als erstes eingebe.
Komischerweise übernimmt bei 0cm, val1 auch "0 Meter", aber bei val2 steht dann 6.95335e-310 Meter "...Und wenn ich 1cm eingebe, dann steht bei val1 "62.0756e-317 Meter" und bei val2 "0.01 Meter"...
Woran liegt das?
Hier ist das Programm:
int main() { double x; // Eingabe -> Größe double val1; // Kleinste Zahl double val2; // Größte Zahl string wert; // Eingabe -> Wert char wert1; // Erster Buchstabe von Wert while(0 < 1) { // KA was ich ich sonst eingeben soll dass sich die schleife immer wiederholt cin >> x >> wert; wert1 = wert[0]; // Wandelt ersten Buchstaben von string in char um switch(wert1) { case 'c': // cm x=x/100; break; case 'm': // m x=x; break; case 'i': // inch x=x*2.54/100; break; case 'f': // ft x=x*12*2.54/100; break; default: cout << "Bitte geben sie cm, inch, m oder ft ein!\n"; } if(val1 && val2 == 0) { val1=x; val2=x; } else { if(x < val1) { val1 = x; } else { if(x > val2) { val2 = x; } } } cout << "Bisher kleinster Wert: " << val1 << " Meter\n"; cout << "Bisher grösster Wert: " << val2 << " Meter\n"; } }Schonmal Danke

-
// ... if(val1 == 0 && val2 == 0) { val1=x; val2=x; } // ... }
-
Das hilft iwie auch nicht weiter.
-
Du hast vergessen, die beiden Variablen am Anfang zu initialisieren - das heißt, sie erhalten bis zur ersten Zuweisung einen unbestimmten Wert.
PS: alle Variablen am Anfang der Funktion zu definieren war in C++ noch nie nötig
Und für Endlosschleifen gibt es auffälligere Lösungen wie for(;; )oderwhile(true)
-
Ok danke, habe es jetzt geändert:
double val1 = '0'; double val2 = '0';Jetzt kommt aber bei der Eingabe von 1cm:
Bisher kleinster Wert: 0.01 Meter
Bisher grösster Wert: 48 MeterDas ist ja auch nicht wirklich richtig oO
Das mit der Whileschleife funktioniert, danke

Warum funzt das alles immernoch nicht? Weiß einer noch ne Lösung?...
-
Naja, richtig ist das schon ;P '0' == 48. Du hast halt intern ein cast von char nach int erreicht, laut ASCII-Tabelle ist '0' der Wert 48. Lass die ' ' weg und es sollte funzen.
-
Ahh vielen Dank, jetzt funzt es

Hier das funzende:
#include "std_lib_facilities.h" int main() { double x; double val1 = 0; double val2 = 0; string wert; char wert1; while(true) { cin >> x >> wert; wert1 = wert[0]; switch(wert1) { case 'c': x=x/100; break; case 'm': x=x; break; case 'i': x=x*2.54/100; break; case 'f': x=x*12*2.54/100; break; default: cout << "Bitte geben sie cm, inch, m oder ft ein!\n"; } if(val1 == 0 && val2 == 0) { val1=x; val2=x; } else { if(x < val1) { val1 = x; } else { if(x > val2) { val2 = x; } } } cout << "Bisher kleinster Wert: " << val1 << " Meter\n"; cout << "Bisher grösster Wert: " << val2 << " Meter\n"; } }
-
Ist zwar nur eine Kleinigkeit, aber die die Prüfung, welche Einheit der Nutzer eingegeben hat, ist etwas ungenau und unflexibel. Was kommt heraus, wenn er "cl" (Zentiliter - bestimmt keine Längeneinheit) oder "fische" eingibt? Was macht du, wenn du das Programm später mal auf Meilen oder mm erweitern willst?
(btw, was soll herauskommen, wenn der erste eingegebene Wert tatsächlich 0 ist?)
-
Habe ich noch gar nicht dran gedacht oO
Habs halt jetzt blind gemacht wie es die Übungsaufgabe verlangt.
Und des mit 0 ist auch nicht so das Wahre ich weiß, aber kümmert mich gerade recht wenig

-
Bumblebee schrieb:
Habe ich noch gar nicht dran gedacht oO
Habs halt jetzt blind gemacht wie es die Übungsaufgabe verlangt.
Und des mit 0 ist auch nicht so das Wahre ich weiß, aber kümmert mich gerade recht wenig

Nun ja ... man muss sich immer überlegen, wozu denn Übungsaufgaben gut sein könnten ...