problem bei meinem mini prog
-
Hallo zusammen,
Bin ein absoluter c++ neuling und habe gerade mein erstes mini programm geschrieben (passend zum führerschein den ich gerade mache
)naja auf jeden fall habe ich mir den quelltext jetzt schon x-mal durchgelesen und komme einfach nicht auf den fehler...wäre nett wenn mir hier jemand kurz helfen könnte
#include <iostream> #include <cstdlib> #include <string> #include <cstdio> #include <conio.h> #include <function> using namespace std; int main() { int geschw, gefahr; string bw; cout << "Geben Sie eine Geschwindigkeit (km/h) ein: \n\n"; cin >> geschw; cout << "Gefahrbremsung? (j/n)" << endl; cin >> gefahr; if ( gefahr == "n" || gefahr == "N") { int bw = (geschw / 10) * (geschw / 10); } else { int bw = ((geschw / 10) * (geschw / 10)) / 2; } int rw = (geschw / 10) * 3; int aw = rw + bw; cout << endl; cout << "Ihr Reaktionsweg betraegt: " << rw << " meter" <<endl; cout << "Ihr Bremsweg betraegt: " << bw << " meter" << endl; cout << "Ihr Anhalteweg betraegt: " << aw << " meter \n\n" << endl; getch(); return 0; }
-
was für ein fehler tritt denn auf?
was mir auf anhieb ins auge springt, ist, dass du mit ints rechnest. ich würde floats oder doubles nehmen, da vor allem bei den divisionen dir sehr viel genauigkeit verloren geht, da immer abgerunden wird.
wenn du zb als geschwindigkeit 9 eingibst, wird da gerechnet:9/10=0
bw = 0*0 = 00/10 = 0
rw = 0*3 = 0aw = 0+0 = 0
mit floats oder doubles:
9./10. = .9
bw = .9*.9 = .819./10. = .9
rw = .9*3 = 2.7aw = 2.7 + .81 = 3.51
-
Fehler:
1. Keine genaue Fehlerbeschreibung geliefert.
2.if ( gefahr == "n" || gefahr == "N")
"x" liefert ein char const*
'x' liefert ein char
if ( gefahr == 'n' || gefahr == 'N')Warnungen:
1. Unnötig viele Headers inkludiert.
2. C++ C-Headers inkludiert. Man sollte wenn möglich nicht C und C++ mixen.
3.getch()ist nicht Platform unabhängig, genauso wie<conio.h>
4. Es wäre eine Überlegung wert, ob man nicht besser mit float oder double rechnen möchte.
5. Pass auf mit der Verwendung vonusing namespace std;.Grüssli
-
ähm also ich arbeite zurzeit mit Dev-C++ und da tritt der fehler beim kompilieren auf. Als Fehlerlog bekomme ich
In function
int main()': invalid operands of types \float' and `const char[2]' to binaryoperator==' invalid operands of types \float' and `const char[2]' to binary `operator=='
no match for 'operator+' in 'rw + bw'also ich habs jetzt mit float versucht aber hat nichts geändert...als ich dass ganze ohne if else funktion gemacht habe hats auch funktioniert
-
phreakcoder schrieb:
... Dev-C++ ...
3. Fehler: Du Verwendest Dev-C++
Nimm lieber Code::Blocks oder Microsoft Visual Studio 2008 Express Edition.
Dev-C++ wird nicht mehr weiterentwickelt und gilt als deprecated!Grüssli
-
microsoft visual studio will ich wenn möglich vermeiden da es sehr groß ist und ich nur eine ISDN i-net verbindung habe
-
code::blocks ist ziemlich klein, ich glaub 16 mByte, ohne compiler und 22 mit mingw compiler
-
ok bin gerade ma laden...aber ist der codeblock sonst ok oder ist noch ein fehler drin?
-
fehler kenne ich keine, du musst nur schauen dass das mit dem compiler klappt, das erste mal als ich es installiert hatte, konnte ich nix kompileren^^
ach ja du kannst dir auch eine DVD mit dem kompletten VS 2008 EE bestellen bei microsoft
-
phreakcoder schrieb:
ok bin gerade ma laden...aber ist der codeblock sonst ok oder ist noch ein fehler drin?
Ich hoffe mal du hast meine Fehler 1 und 2 beachtet.
Ehm, doch habe gerade dank der Fehlermeldung noch einen Fehler gefunden:int geschw, gefahr; string bw; // bw ist string cout << "Geben Sie eine Geschwindigkeit (km/h) ein: \n\n"; cin >> geschw; cout << "Gefahrbremsung? (j/n)" << endl; cin >> gefahr; if ( gefahr == "n" || gefahr == "N") { int bw = (geschw / 10) * (geschw / 10); // bw ist int und wird gleich wieder verworfen } else { int bw = ((geschw / 10) * (geschw / 10)) / 2; // bw ist int und wird gleich wieder verworfen } int rw = (geschw / 10) * 3; // scheint ok zu sein int aw = rw + bw; // das geht nicht. bw ist hier ein leerer string.Kann es sein, dass du oben bei
string bweigentlichint bwmeintest und unten die ints vor dem bw weglassen?
Wenn das nicht klar ist, dann empfehle ich dringend nochmals die Grundlagen von C++ durch zu ackern!Grüssli
-
ok ähm dadurch dass ich so gut wie alles ausprobiert habe xD, habe ich das wahrscheinlich übersehen...aber na gut hier mein neuer code
#include <iostream> #include <cstdlib> #include <cstdio> using namespace std; int main() { float geschw, gefahr; cout << "Geben Sie eine Geschwindigkeit (km/h) ein: \n\n"; cin >> geschw; cout << "Gefahrbremsung? (j/n)" << endl; cin >> gefahr; if ( gefahr == "n" || gefahr == "N") { float bw = (geschw / 10) * (geschw / 10); } else { float bw = ((geschw / 10) * (geschw / 10)) / 2; } float rw = (geschw / 10) * 3; float aw = rw + bw; cout << endl; cout << "Ihr Reaktionsweg betraegt: " << rw << " meter" <<endl; cout << "Ihr Bremsweg betraegt: " << bw << " meter" << endl; cout << "Ihr Anhalteweg betraegt: " << aw << " meter \n\n" << endl; system("PAUSE"); return 0; }
-
Mein zweiter aufgeführten Fehler hast du immer noch nicht korrigiert. Oder hast den Post gar nicht gelesen?
Dravere schrieb:
Fehler:
1. Keine genaue Fehlerbeschreibung geliefert.
2.if ( gefahr == "n" || gefahr == "N")
"x" liefert ein char const*
'x' liefert ein char
if ( gefahr == 'n' || gefahr == 'N')Warnungen:
1. Unnötig viele Headers inkludiert.
2. C++ C-Headers inkludiert. Man sollte wenn möglich nicht C und C++ mixen.
3.getch()ist nicht Platform unabhängig, genauso wie<conio.h>
4. Es wäre eine Überlegung wert, ob man nicht besser mit float oder double rechnen möchte.
5. Pass auf mit der Verwendung vonusing namespace std;.Grüssli
Und du scheinst noch nachholbedarf in Sachen Scope zu haben! Naja, ich schreib dir nochmals ein paar Hinweise hin.
if ( gefahr == "n" || gefahr == "N") // "" gibt const char*, '' gibt char { float bw = (geschw / 10) * (geschw / 10); // bw wird erstellt, Wert zugewiesen. } // bw wird zerstört. else { float bw = ((geschw / 10) * (geschw / 10)) / 2; // bw wird erstellt, Wert zugewiesen. } // bw wird zerstört. float rw = (geschw / 10) * 3; float aw = rw + bw; // bw ist gar nicht vorhanden!Grüssli
-
ahh super jetzt hab ichs gecheckt xD...danke für die hilfe
PS: gibt es Code::Blocks auch auf deutsch?