probleme mit taschenrechner



  • Ich hab das Programm mal getestet, wie es hier oben steht und ich bekomme als Ergebnis nur +NAN.
    Zuerst weiß ich nicht mal, was für ein Fehler das ist un zweitens warum ist das so ?



  • Hallo,

    NAN heisst eigentlich Not a number. Und ja, du hast Recht, das Dingen funktioniert nicht.

    printf("Ergebniss:%g\n",&z);  // falsch
    printf("Ergebniss:%g\n",z);  // richtig
    

    Es werden die Adressen ausgegebn, aber nicht die Werte. Du musst einfach den Adressoperator & weglassen.



  • Kann man vielleicht durch Änderung der Variablen vielleicht was erwirken... das teste ich am besten jetzt mal !



  • void main() ???????? 😕 😕

    Das ist ANSI C Forum, bitte dann int main benutzen!



  • @supertux:
    Deinen letzten Beitrag verstehe ich nicht, schon gar nicht in Zusammenhang mit der zitierten Aussagen. Außerdem waren wir über die Problematik schon längst hinaus.



  • @CarstenJ: Ich hab einen Fehler gemacht, ich muss auf Zitat geklickt haben ohne zu merken. Ich wollte nur wegen void main lästern



  • ich habe mal alle sachen geändert die ihr gesagt habt und es funktioniert immer noch nicht



  • ok. mein programm funktioniert jetzt. habe die restlichen fehler noch selbst herausgefunden.

    edit: mist, es kommt immer -1 raus



  • bei meinem programm kommt immer als ergebnis

    -1.#QNAN

    weiß jemand was dass bedeutet?

    hier mein jetziger code
    [/cpp]nclude <stdio.h>
    #include <math.h>

    int main()

    {
    double wahl, x, y, z, rest;
    printf("\n*Taschenrechner*\n\n");
    printf("Was moechtest du tun?\nZum Auswaehlen einfach die passende nummer wählen.\n 1. Addition\n 2. Subtraktion\n 3. Multiplikation\n 4. Division\n\n ");
    scanf("%g",&wahl);

    if (wahl==1) /*addition*/
    {
    printf("Gib bitte den 1. Wert ein.\n");
    scanf("%g",&x);
    printf("Gib bitte den 2. Wert ein.\n");
    scanf("%g",&y);
    z= x + y;
    printf("Ergebniss:%g",z);
    scanf("%g",&rest);
    }

    else if (wahl==2) /*subraktion*/
    {
    printf("Gib bitte den 1. Wert ein.\n");
    scanf("%g",&x);
    printf("Gib bitte den 2. Wert ein.\n");
    scanf("%g",&y);
    z= x - y;
    printf("Ergebniss:%g\n",z);
    scanf("%g",&rest);
    }

    else if (wahl==3) /*multiplikation*/
    {
    printf("Gib bitte den 1. Wert ein.\n");
    scanf("%g",&x);
    printf("Gib bitte den 2. Wert ein.\n");
    scanf("%g",&y);
    z= x * y;
    printf("Ergebniss:%g\n",z);
    scanf("%g",&rest);
    }

    else if (wahl==4) /*division*/
    {
    printf("Gib bitte den 1. Wert ein.\n");
    scanf("%g",&x);
    printf("Gib bitte den 2. Wert ein.\n");
    scanf("%g",&y);
    z= (x / y);

    printf("Ergebniss:%g\n",z);
    scanf("%g",&rest);
    }
    return 0;
    }

    [cpp]



  • kann mir niemand helfen?



  • Question:

    Warum Liest du den "rest" ein?

    Warum verwendest du %g ?
    (Ich verwende bei double %f)



  • Ich kann leider zum Problem nix beitragen aber ein Kommentar hätte ich noch: Wenn ihr euren Code einrückt, nimmt die Lesbarkeit erheblich zu und man sieht die Fehler viel viel schneller.



  • Wenn ihr euren Code einrückt, nimmt die Lesbarkeit erheblich zu und man sieht die Fehler viel viel schneller.

    Soetwas... das wäre mir nie eingefallen... aber nochwas...
    es giebt sogar eine eigene Schaltfläche "C/C++". 😃



  • und wie du sicher siehst...
    hat er versucht, es korrekt anzuzeigen, aber...

    schau in seiner Nachricht nach... er hat [cpp] ganz am Ende doch geschrieben!



  • chille07 schrieb:

    und wie du sicher siehst...
    hat er versucht, es korrekt anzuzeigen, aber...

    schau in seiner Nachricht nach... er hat [cpp] ganz am Ende doch geschrieben!

    Er hat zuerst das CPP Tag geschlossen und dann es geöffnet.



  • wenigstens hat ers versucht...
    und dann hilft ihm dein Ratschlag auch nicht weiter...
    (einrücken)



  • so, ich habe double mal gegen int eingetauscht. jetzt funktioniert es. 💡

    PS:mein code ist normalerweise eingerückt. ist nur scheinbar duch dass kopieren irgendwie abhanden gekommen. 👍



  • chille07 schrieb:

    wenigstens hat ers versucht...
    und dann hilft ihm dein Ratschlag auch nicht weiter...
    (einrücken)

    Ich hab auch nicht für diesen Code gemeint, sondern im allgemeinen. Ich sehe hier, dass viele den Code posten und der ist nicht eingerückt. Ist sicherlich dem Compiler egal, ob der Code eingerückt ist oder nicht, aber wir sind eben Menschen und keine Compiler.



  • supertux schrieb:

    aber wir sind eben Menschen und keine Compiler.

    Das ist eigentlich ein Spruch für ne Signatur... 😉



  • [quote="C-Progger"]ich habe versucht einen kleinen taschenrechner zu schreiben und bekomme immer massig fehlermeldungen.

    könnt ihr mir sagen was da alles falsch ist?

    ich habe eine andere Idee, das Problem des Taschenrechner zu lösen, und zwar mit 3 Funktionen und eine Switch, case Methode

    #include<stdio.h>
    #include<math.h>

    float Add(float, float);//Funtion für Addition
    float Dev(float, float);// F. für Devision
    float Mult(float, float);// Multiplikation

    int main()
    {
    float a, b;
    printf("1. Zahl: ");
    scanf("%g", &a);
    printf("2. Zahl: ");
    scanf("%g", &b);
    while(getchar != '\n');// versuch mal ohne dieser
    // Zeile das Programm auszuführen,
    char wahl;
    printf(".......................Tachenrechner..........................\n");
    printf("Bitte waehlen: \n\ta:Addition \n\tm:Multiplikation \n\td: Devision\n");
    scanf("%c",&wahl);
    switch(wahl)
    {
    case 'a': printf("Die Addition von %g und %g ist %g \n",a,b,Add(a,b));
    break;
    case 'm': printf("Die Multp. von %g und %g ist %g \n",a,b,Mult(a,b));
    break;
    case 'd': printf("Die Devision von %g durch %g ist %g \n",a,b,Dev(a,b));
    break;
    default: printf("Leider habe Sie eine falsche Eingabe eingegeben!!!\n");
    }
    return 0;
    } //Ende main Funktion

    float Add(float x, float y)
    {
    return(x+y);
    }
    float Mult(float x, float y)
    {
    return (x*y);
    }
    float Dev(float x, float y)
    {
    if (y == 0)
    {
    printf("\nDie Devision durch 0 ist nicht bekannt oder nicht zulässig!!!n");
    exit(0);
    }
    else
    return (x/y);
    }


Anmelden zum Antworten