Fehler in Programm, wer findet ihn?
-
Mir is leider gerade noch ein Fehler aufgefallen
Immer wenn am Ende eines Wertes die Zahl 9 steht, gibt er folgendes ergebnis für die 9 raus:
Bsp: 299:
1200;
150;
120;
220;
15;
12;
2*2;also schreibt er immer statt 10 und 1 --> 20 bzw. 2
also rechnet er imm 1*2 +2*2( =1) =4
Ich verstehe das einfach nicht, da er sonst jeden anderen Wert auch richtig rechnet... O.o
-
Ich versteh nicht, was x macht.
-
x ist dafür da, damit der wert von anzahl[i] pro subtraktion um 1 hochgezählt wird.
und bevor ein neuer wert für die subtraktion verwendet wird (also die whileschleife neu beginnt) wird x auf 1 zurückgesetzt.
Ich weis nich ob man das so schreiben muss, ich bin ziemlich neu im programmiere...
-
Ich hab den Code mal einrücken lassen...
#include <stdio.h> #include <windows.h> main() { float geld[15], wert; float anzahl[15]; int i=0, x=1, z=0; geld[0] = 500; geld[1] = 200; geld[2] = 100; geld[3] = 50; geld[4] = 20; geld[5] = 10; geld[6] = 5; geld[7] = 2; geld[8] = 1; geld[9] = 0.5; geld[10] = 0.2; geld[11] = 0.1; geld[12] = 0.050; geld[13] = 0.020; geld[14] = 0.010; while(1) { printf("\n\nBitte geben Sie den Wert ein: "); scanf("%f", &wert); for(z=0; z<=14; z++) { anzahl[z] = 0; } printf("\n\nIhr Wechselgeld: "); for(i = 0; i<= 14; i++) { while (wert >= geld[i]) { wert = wert - geld[i]; anzahl[i] = x++; printf("\n"); if(geld[i]>=1.0) { printf("\n\t\t%.0f * %.0f Euro\n", anzahl[i], geld[i]); } else { printf("\n\t\t%.0f * %.0f Cent\n", anzahl[i], geld[i]*100); } } x=1; } printf("\n\n"); system("PAUSE"); } }
Aha, jetzt verstehe ich x.
Der Trick macht einfach
anzahl[i] = anzahl[i] + 1;
über einen Umweg.
-
Ok, so sieht das natürlich schöner und übersichtlicher aus
aber auf den fehler, warum er 4 so komisch umformt, hast du auch noch keine antwort, oder?
-
Ok, ich hab den Fehler selbst entdeckt, die ifschleife sitzt ja am falschen Platz xD
-
Er rechnet gar nicht falsch. Er zeigt nur an einer ungeschickten Stelle an.
Ungeschickt.
for(i = 0; i<= 14; i++) { while (wert >= geld[i]) { wert = wert - geld[i]; anzahl[i] = x++; printf("\n"); if(geld[i]>=1.0) { printf("\n\t\t%.0f * %.0f Euro\n", anzahl[i], geld[i]); } else { printf("\n\t\t%.0f * %.0f Cent\n", anzahl[i], geld[i]*100); } } x=1; }
Besser erst sammeln und dann erst anzeigen.
for(i = 0; i<= 14; i++) { while (wert >= geld[i]) { wert = wert - geld[i]; anzahl[i] = x++; } printf("\n"); if(geld[i]>=1.0) { printf("\n\t\t%.0f * %.0f Euro\n", anzahl[i], geld[i]); } else { printf("\n\t\t%.0f * %.0f Cent\n", anzahl[i], geld[i]*100); } x=1; }
-
Ja so habe ich es jetzt auch gelöst mit einer weiteren if-schleife davor:
while (wert >= geld[i]) { wert = wert - geld[i]; anzahl[i] = x++; } if(anzahl[i]!=0){ if(geld[i]>=1.0) { printf("\n\t\t%.0f * %.0f Euro\n", anzahl[i], geld[i]); } else { printf("\n\t\t%.0f * %.0f Cent\n", anzahl[i], geld[i]*100); } }
Jetzt zeigt er nur die Werte an, wo er was ausgibt
Danke noch mal
-
Falls Du den Microsoft-Compiler benutzt, drücke gelegentlich
Strg+A (alles markieren)
Alt+F8 (Markierung automatisch einrücken)Bei Code::Blocks wäre es Plugins/SourceCodeFormatter
Und schau http://www.if-schleife.de/ mal vorbei.
-
Ok, danke für die Tipps, ich werds mir für die Zukunft merken