Finde den Fehler nicht
-
Hallo,
habe ein Programm geschrieben bei dem eine Anfangs und endzahl eingegeben wird. Das Progr. soll dann jede Zahl die es durchläuft in der Potenz ^3 (zahl1*zahl1*zahl1) ausgeben. Wenn aber ein ergebniss rauskommt, das mehr als 10 stellen hat, soll es eine Fehlermeldung ausgeben, da es nur bis 10 stellen rechnen soll. Mein Programm läuft nun einwandfrei bei zahlen bis 10 stellen. Sind sie grösser, bringt es unfug. Vielleicht findet einer von euch den Fehler.
#include <stdio.h>
main()
{int zahl1,zahl2,hoechstzahl;
printf("Dieses Programm berechnet die Potenz ^3\n");
printf("Bitte geben Sie keine Zahlen ueber 1625 ein\n");
printf("Bitte Bitte beachten Sie, die 2. Zahl muss groesser als die erste sein\n");
printf("und nun gehts los :");printf("\n\nBitte Geben sie die erste Zahl ein: ");
scanf("%d",&zahl1);
fflush (stdin);printf("Bitte Geben sie die zweite Zahl ein: ");
scanf("%d",&zahl2);
fflush (stdin);hoechstzahl=zahl2*zahl2*zahl2;
fflush (stdin);if (hoechstzahl>9999999999)
printf("Sorry, ich darf nur bis 10 Stellen rechnen");else
for (;zahl1<=zahl2;zahl1++)
printf("\nDas Ergebnis lautet %d",zahl1*zahl1*zahl1);return 0;
}
Viele Grüße
Jens
-
benutze bitte Code Tags!
Was ich auf den ersten Blick sehe
1. heisst es int main(void) und nicht main()!
2. fflush ist nicht auf Lese Only Streams wie stdin erlaubt
Dann noch ein paar Tipps
benutze lieber pow (aus math.h) anstelle zahl1*zahl1*zahl1
-
ein int geht normalerweise (32Bit Systeme) nur bis +2 millionen...
long long waere groesser, bzw. unter windows auch oefters __int64 genannt.
Aber ob der 10 Stellen vertraegt, weiss ich nicht. Wenn nicht musst du dir ne library suchen, die so grosse Zahlen verarbeiten kann. zB bei GNU gibts eine!
-
long long ist C Standard, __int64 nicht :p
wenn du zu dem MSVC++ Compiler kompatibel sein willst, dann mach am besten folgendes
#ifdef _MSVC_ typedef __int64 int64; #else //real C Compiler typedef long long int64; #endif
@Shade
die GNU Lib, die du meinst ist GNU MP
-
Danke erst mal an alle für die schnellen Antworten. Das ganze ist eine Hausaufgabe von der Schule. Wie ich euren Antworten entnehme, kann/solte man bei int normalerweise keine 10 stelligen zahlen nehmen. Habe nun angeregt durch euch, diese Loesung mit 9 Zahlen gefunden:
#include <stdio.h> int main() { int zahl1,zahl2,hoechstzahl; printf("Dieses Programm berechnet die Potenz ^3 bis max. 9 stellen\n"); printf("Bitte Bitte beachten Sie, die 2. Zahl muss groesser als die erste sein\n"); printf("und nun gehts los :"); printf("\n\nBitte Geben sie die erste Zahl ein: "); scanf("%d",&zahl1); printf("Bitte Geben sie die zweite Zahl ein: "); scanf("%d",&zahl2); hoechstzahl=zahl2*zahl2*zahl2; if (hoechstzahl>999999999) printf("Sorry, ich darf nur bis 9 Stellen rechnen"); else for (;zahl1<=zahl2;zahl1++) printf("\nDas Ergebnis lautet %d",zahl1*zahl1*zahl1); return 0; }
Nochmals DANKE an alle und viele Grüße
Jens
-
999999999??
Dein int vertraegt das?Meiner kann nur +-2mio
welches OS und CPU verwendest du denn?
-
Hallo,
WINDOWS ME, AMD DURON 750, MS VISUAL 6.00
Gruss
Jens
-
dann gibts trotzdem Probleme.
Ein int ist auf deinem System nur 32Bit gross, das macht +-2 mio bzw. wenn er unsigned ist 4 mio
aber
999999999
sind
999 mioes gibt also einen ueberlauf...
-
Hi,
bei mir klappt es, warum weiss ich nicht. Habe eben nur vergessen, das ich von MS Visual C++ eine englischsprachige Version habe. Kann mir aber nicht vorstellen, das es daran liegen sollte. Habe gerade versuchsweise als erste Zahl 995 und als zweite 999 eingegeben und es funzt. Gehe ich darüber kommt die eingebaute Fehlermeldung: Sorry, ich darf nur bis 9 Stellen rechnen.
Gruss
Jens
-
+2^31 - 1 sind IMHO ca. 2 Milliarden.
Und 2^31 - 1 hat es so an sich, 10stellig zu sein.Ist also ganz normal, daß es klappt.