Fehler finden...



  • Ich programmiere gerade zu Testzwecken einen Taschenrechner in C. Er soll mit zwei Zahlen und einem Rechenoperator arbeiten können, da mir abgesehen von der Fallunterscheid per "switch" keine Möglichkeit einfällt, das Ergebnis gemäß dem eingegebenen Operator(en bei mehreren Zahlen) vernünftig zu berechen.

    Das Problem scheint übrigens die Eingabe des Operators (Zeile 15) zu sein, denn der hier zu einem Kommentar degradierte Ausgabe-Befehl des Operators gibt ein Leerzeichen aus. Entsprechend erhalte ich immer die Fehlermeldung: Fehlerhafter Operator!

    Ich wäre sehr froh, wenn einer von euch Profis mal schauen könnte, was da los ist...

    #include <stdio.h>
    
    int main()
    {
        int zahl[2]={0,0}, i=0, quit=0;
        char op=0;
    
        fflush(stdin);
        printf("Bitte geben Sie zwei Zahlen und einen Rechenoperator ein.\n\n");
    
        printf("1. Zahl:\t");
        scanf("%d", &zahl[0]);
        fflush(stdin);
        printf("Operator:\t");
        scanf("%d", &op);
        fflush(stdin);
        printf("2. Zahl:\t");
        scanf("%d", &zahl[1]);
        fflush(stdin);
    
        // printf("%c", op);
        // system("PAUSE");
    
                switch(op)
                {
                    case '+': printf("\n%d + %c = %d", zahl[0], zahl[1], zahl[0] + zahl[1]);
                    break;
    
                    case '-': printf("\n%d - %c = %d", zahl[0], zahl[1], zahl[0] - zahl[1]);
                    break;
    
                    case '*': printf("\n%d * %c = %d", zahl[0], zahl[1], zahl[0] * zahl[1]);
                    break;
    
                    case '/': printf("\n%d / %c = %d", zahl[0], zahl[1], zahl[0] / zahl[1]);
                    break;
    
                    default: printf("Fehlerhafter Operator");
                }
    
        return 0;
    }
    


  • Ich habe mir den Rest des Codes nicht genau angeschaut aber ich denke in Zeile 15 muesste

    scanf("%c", &op)
    

    stehen, da du nicht einen Integer sondern einen Character einlesen moechtest.



  • icarus2 schrieb:

    Ich habe mir den Rest des Codes nicht genau angeschaut aber ich denke in Zeile 15 muesste

    scanf("%c", &op)
    

    stehen, da du nicht einen Integer sondern einen Character einlesen moechtest.

    Das ist naheliegend. Ich teste es kurz...

    edit: Und natürlich müssen die ganzen %c's im switch-Bereich durch %d's ersetzt werden. Ich bin echt doof...



  • Noch eine Frage bzgl. dieses kleinen Programms:

    Welchen Zahlenbereich deckt "float" ab?

    Ich möchte, dass der Rechner Kommazahlen beherrscht, sechs Stellen reichen da locker. Nun will ich aber wissen, welcher Bereich der Ganzzahlen durch float abgedeckt wird.
    "int" reicht ja von -2.147.483.648 bis 2.147.483.647
    Wie sieht es da bei float aus?

    Ich habe relativ viele Zahlen eingegeben (Schätzungsweise eine "1" mit ~150 "0") und ausgegeben wurde nur "1.#INF00".



  • Kommazahlen gibt es in C nicht, das ist manchmal eine böse Falle.
    Das Trennzeichen ist in Amiland halt ein Dezimalpunkt (mit '.').

    Schau Dir mal an, wie das Gleitkommaformat intern repräsentiert wird
    (Google, Wikipedia). Es ist keine feste Anzahl Stellen, eher so ein Schätzwert.
    zB Tests auf 0 sind etwas tricky.

    Der Zahlenbereich int (wie auch bei anderen) hängt vom Compiler und der
    Hardware ab. Sind nicht immer zwingend 16 oder 32 Bit.



  • Scheppertreiber schrieb:

    Kommazahlen gibt es in C nicht, das ist manchmal eine böse Falle.
    Das Trennzeichen ist in Amiland halt ein Dezimalpunkt (mit '.').

    Schau Dir mal an, wie das Gleitkommaformat intern repräsentiert wird
    (Google, Wikipedia). Es ist keine feste Anzahl Stellen, eher so ein Schätzwert.
    zB Tests auf 0 sind etwas tricky.

    Der Zahlenbereich int (wie auch bei anderen) hängt vom Compiler und der
    Hardware ab. Sind nicht immer zwingend 16 oder 32 Bit.

    Ok, danke dir.


Anmelden zum Antworten