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 mio

    es 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.


Anmelden zum Antworten