Taschenrechner mit String einlesen



  • Hi,
    ich habe ein Problem, mit dem ich nicht so ganz weiter komme.
    Ich möchte einen einfachen Taschenrechner (+,-) programmieren der die Eingabezeile als String einliest. Also in der Form 17.1+15.3+***** usw.
    Jetzt habe ich mir überlegt, dass ich das irgendwie in der Form

    char c;
    c=getchar();
    while(c!=EOF) { 
    
    }
    

    einlese und dann mit atof in double-Werte umwandle.
    Nur wie prüfe ich, ob das eingelesene Zeichen ein Operator oder Operand ist?
    Zerbreche mir jetzt schon seit zwei Tagen den Kopf und komme zu keiner sinnvollen Lösung. 😕



  • Du bist dir also ganz sicher, dass du nur +/- brauchst und auch keine Klammern berücksichtigen musst?

    Dann ist es recht simpel.

    Ich würde immer schauen, wann der nächste Operator kommt bzw das Ende.
    Dann würde ich die Zahl ermitteln bis zu den Operator.
    Und die Zahl kommt zu der Gesammtsumme hinzu, bzw. wird abgezogen.
    Dann alle den Zeiger auf das Zeichen hinter dem Operator setzen und wieder von vorne anfangen.

    PS:
    Ach ja, ich würde auch die Eingabe erst komplett einlesen in ein Array, das macht die Arbeit damit einfacher, als das Zeichenweise einlesen.



  • Ich habe mir jetzt mal soetwas in der Richtung zusammengebastelt:

    int getop (char s[]) { /*getop überprüft, ob Operator oder Operand*/
        int i, c;
        while ((s[] = c = getch()) == ' ' || c=='\t');
        s[1]='\0';
        if (!isdigit(c)&&c!='.')
        return c; /*keine Zahl*/
    
        i=0;
        if(isdigit(c)) /*ganzzahligen Teil sammeln*/
        while (isdigit(s[i++] = c =getch()));
        if(c=='.') /*Dezimalstellen sammeln*/
        while (isdigit(s[i++] = c = getch()));
        s[i] = '\0';
        if (c!=EOF)
        ungetch(c);
        return 0;
    }
    
    int main() {
        char zeile[80];
        printf("Bitte geben Sie den zu rechnenden Term ein: \n");
        fgets(zeile, 80, stdin);
        getop()= zeile[];
        return 0;
    }
    

    Es funktioniert zwar nicht....aber führt mich, so hoffe ich mal, zumindest in die richtige Richtung?!



  • Wie rufst du denn die Funktion auf 😮 😮

    Wie gesagt, ich würde dir raten, die ganze Zeile komplett in ein Array einzulesen und dann mit dem Array über den [] Operator zu arbeiten.


Anmelden zum Antworten