Division durch 0
-
Hallo zusammen,
hab versucht ein Programm zu schreiben was welches einen Geldbettrag mit möglichst großen scheinen/münzen ausgibt. Klapt auch soweit nur bei bei einigen werten eben nicht und ich komme einfach nicht drauf warum.
wenn der wert 1 ist kommt divison durch 0
wenn der wert direkt ereicht ist kommen seltsame folge werte zb bei 200,500
wenn man ende eine ungrade zahl steht wird der 1 wert einfach weggelassenzb 363,127 und es kommt wieder division durch 0wobei zb 362,166 ohne probleme funktioniert.
Hat das jemand nen vorschlag woran das liegen kann?
mfg
#include <stdio.h> void main(void) { int i,anzahl[9],betrag,wert[9],rest; wert[0]=500; wert[1]=200; wert[3]=100; wert[4]=50; wert[5]=20; wert[6]=10; wert[7]=5; wert[8]=2; wert[9]=1; printf("Bitte geben sie den Betrag ein: "); scanf("%i",&betrag); for(i=0;i<=9;i++) { if(rest>0) { anzahl[i]=betrag/wert[i]; rest = betrag%wert[i]; betrag=rest; } if(anzahl[i]>0) printf("%d * %d\n",anzahl[i],wert[i]); } }
-
Ein Array mit der Größe von 9:
int wert[9];
Hat bloß Indexes von 0-8, dein Zugriff auf wert[9] ist also bereits eins zu viel. Dies führt zu undefiniertem Verhalten und Programmabstürzen.
Viel mir beim ersten drübersehen auf, mehr Fehler könnte man mit einer besseren Formatierung erkennen. Statt normalen Code-Tags bitte für Quellcode die C++-Tags nehmen
MfG SideWinder
-
und benutze int main
-
supertux schrieb:
und benutze int main
Das postest du jetzt überall oder?
-
supertux schrieb:
und benutze int main
Edler Ritter?
/edit: Muh, das hat schon einer vor mir bemerkt-.
MfG SideWinder
-
ManKannsAuchÜbertreiben schrieb:
supertux schrieb:
und benutze int main
Das postest du jetzt überall oder?
ja, wenn man in ANSI C postet, sollte auch valid ANSI C Code posten und void main passt hier nicht. Und wenn man es nicht weiß, dann erkläre ich, damit er/sie in Zukunft kein void main benutzt.
edit: Schau hier http://www.c-plusplus.net/forum/viewtopic.php?t=90508 schon wieder void main! Das macht mmich einfach krank, und wenn ein n00b Such-Funktion benutzt und kriegt ein void main zu sehen, dann schriebt er auch void main
ich vermute, dass jeder 3. Post hier ein void main hat
-
besten Dank!! für die schnelle antwort array größe auf 10 hat das Problem gelöst. Die seltsamen ergebnisse waren weg nachdem ich das array vorher mit 0 voll geschrieben habe. Kann man das irgendwie beim initianlisieren schon machen?
MfG
-
Ja, du kannst ein Array auch im Zuge der Deklaration mit Werten füllen.
int wert[5] = {1,2,3,4,5};
Oder wenn die Anzahl der Werte weniger als die Größe des Arrays ist (aber mindestens eins), wird der Rest mit Nullen gefüllt.
int wert[5]={0};
-
SeppSchrot schrieb:
int wert[5]={0};
Das funktioniert auch mit strukturen, falls du mal mit denen arbeitest und das brauchst
-
hat alles geklapt THx.
MfG
-
@supertux
Ich glaube nicht, dass das void main() daher kommt, dass man hier im Forum soviel davon liest. Das kommt eher von den vorher schon benutzten Lernmitteln. Wenn in einem C-Buch z. B. ständig void main() drinsteht, dann benutzt man es auch so. Möglicherweise wird es auch in der Schule so gelehrt; die Lehrer wissen es hald selber nicht besser oder benutzen die gleichen Lernmittel, wie schon erwähnt.Ich finde es gut, dass du den "Fehler" ansprichst, aber bitte mach es in einem anderen Ton. Dein Post kam nämlich ziemlich schroff rüber, was nicht gerade gut dazu beiträgt den Fehler zukünftig zu vermeiden.