char von Nutzereingabe (getch()) in float/double umwandeln?



  • Es gibt etliche Foren in denen diese Frage schon gestellt wurde, aber keine der vermeintlichen Lösungen hat mir bei meinem Problem geholfen.
    Eventuell findet auch jemand eine ganz andere Lösung, aber bei meinem Lösungsansatz benötige ich die Option die Benutzereingabe zu konvertieren.

    Im Moment kann der Rechner nur mit 2 Zahlen rechnen, aber ich werde es später noch auf beliebig viele Zahlen erweitern, Voraussetzung ist aber, dass das funktioniert.

    Btw, ich weiß manche Stellen im code sind recht unschön gelöst, das liegt daran, dass das schon ein älteres Projekt von mir ist, das ich auf Eis gelegt hatte. Das werde ich später natürlich noch ändern, aber im Moment hänge ich an diesem Problem.

    Irgendwelche Ideen?

    // "SimplerTaschenrechner.cpp": Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    
    #include "stdafx.h"
    #include "conio.h"
    #include "stdlib.h"
    #include "Windows.h"
    #include "stdio.h"
    
    void main(void)
    
    {
    
    	float ergebnis, ziffera = 0, zifferb = 0, umrechnung;
    	char zeichen;
    	char buchstabe, ziffer;
    
    start:
    
    	system("cls");
    
    eins:
    
    	ziffer = _getch_nolock();
    	printf("%c", ziffer);
    
    	if (ziffer == '+' || ziffer == '-' || ziffer == '/' || ziffer == '*') {
    		goto zwei;
    	}
    
    	ziffera = ziffera + (double)ziffer;
    
    	goto eins;
    
    zwei:
    
    	zeichen = ziffer;
    
    	//----------------------------
    
    drei:
    	ziffer = _getch_nolock();
    	printf("%c", ziffer);
    
    	if (ziffer == '=') {
    		goto vier;
    	}
    
    	zifferb = zifferb + (double)ziffer;
    
    	goto drei;
    
    vier:
    
    double	zahl1 = ziffera;
    double	zahl2 = zifferb;
    
    	switch (zeichen) {
    		case '+' : ergebnis = zahl1 + zahl2; break;
    		case '-' : ergebnis = zahl1 - zahl2; break;
    		case '/' : ergebnis = zahl1 / zahl2; break;
    		case '*' : ergebnis = zahl1 * zahl2; break;
    
    	}
    
    	printf("%g\n\n\n", ergebnis);
    	printf("Um erneut etwas auszurechnen, druecke r.\n");
    	printf("Um das Programm zu schliessen, druecke e.\n");
    
    switcher:
    
    	buchstabe = _getch_nolock();
    
    		switch (buchstabe) {
    			case 'r': goto start; break;
    			case 'e': goto end; break;
    			default: goto switcher; break;
    	}
    
    end:
    
        return;
    }
    


  • Was ich vielleicht noch dazu sagen sollte ist, dass in dem code bereits eine "provisorische Umwandlung" drin ist.

    Also

    x = (float) Y

    Des funktioniert natürlich nicht.

    An sich wirft der code keine Fehler, aber die Rechenergebnisse sind vollkommen falsch.



  • Möchtest du eigentlich C oder C++ lernen? Dein Code bisher ist reines C (aber verwendest durch die Endung ".cpp" einen C++-Compiler).

    Um zu sehen warum du falsche Ergebnisse erhältst:

    printf("%f", (double)ziffer);
    

    (als Ausgabe kriegst du den ASCII-Code des Zeichens)

    Um 2 Zahlen + Operator in C einzulesen, reicht

    float a, b;
    char op;
    scanf("%f%c%f", &a, &op, &b);
    
    switch (op)
    {
      // ...
    }
    

    Deinen Code solltest du also komplett überarbeiten (bzw. löschen).


Log in to reply