Taschenrechner mit String-Eingabe



  • Hallo Community!

    Vorerst 2 Informationen:
    Einerseits bin ich neu in diesem Forum, weswegen es möglich ist, dass ich einen ähnlichen Thread einfach nicht gefunden habe.
    Desweiteren bin ich Informatik-Student im ersten Semester und hatte vorher noch nie mit Informatik zu tun (nichtmal in der Schule), weswegen dieser erste Monat Programmiervorlesung und Programmierbücher alle meine Kenntnisse darstellt.

    Nun zum eigentlichen Problem:

    Ich muss einen Taschenrechner in C programmieren mit den Grundrechenoperationen, wobei eben Punkt- vor Strichrechnung mitbedacht werden muss. Klammern sind erstmal nicht zwingend und zur Einfachheit will ich sie auch erstmal weglassen. Die Eingabe soll über einen String erfolgen.

    Nun habe ich mich natürlich kurz nachdem wir die Aufgabe aufhatten, vor 2 Tagen, drangesetzt und bin bis jetzt gescheitert. Nun bin ich relativ ratlos, da ich schon mehrere andere Varianten ausprobierte, aber alles nicht funktionierte.

    Darum bitte ich Euch, mir wenigstens einen Hinweis mal zu geben, was ich falsch gemacht/gedacht habe bzw wie ich anders rangehen sollte.

    Mein fehlerbehafteter Quellode lautet wie folgt:

    #include <stdio.h>
    #include <string.h>
    
    main()
    {
        int i = 0, j = 0, k = 0, m = 30, a = 16, b = 16, c = 16;
        double realzahl[a], realoperation[b], zwischenergebnis[c], ergebnis = 0;
        char rechenzeile[i], operation[3], zahl[j], speicher[m];
    
        operation[0]='+';
        operation[1]='-';
        operation[2]='*';
        operation[3]='/';
    
        for(j; j <= 9; j++)
        {
            zahl[j]=k;
            k++;
        }
    
        m = 0;
    
        printf("Bitte Rechnung eingeben:\n");
        gets(rechenzeile);
    
        for(i = 0; i <= 30; i++)
        {
            switch (rechenzeile[i])
            {
                case zahl[j]:   speicher[m] = zahl[j];
    
                                break;
                case operation[0]:  speicher[m] = operation[0];
    
                                    break;
                case operation[1]:  speicher[m] = operation[1];
    
                                    break;
                case operation[2]:  speicher[m] = operation[2];
    
                                    break;
                case operation[3]:  speicher[m] = operation[3];
    
                                    break;
            }
            m++;
        }
    
        i = 0;
        a = 0;
        b = 0;
        for(m = 0; m <= 30; m++)
        {
            if (strcmp(speicher[m].zahl[]) == 0)
            {
                strtod(realzahl[a] = strcat(speicher[m].speicher[m-1]));
                a++;
            }
            else (strcmp(speicher[m].operation[i]) == 0)
            {
                switch (operation[i])
                {
                    case '+':   operation[i] = strtod('+');
    
                                break;
                    case '-':   operation[i] = strtod('-');
    
                                break;
                    case '*':   operation[i] = strtod('*');
    
                                break;
                    case '/':   operation[i] = strtod('/');
    
                                break;
                }
                realoperation[b] = operation[i];
                b++;
            }
        }
    
        i = 0;
        a = 0;
        b = 0;
        for(b; b <= 16; b++)
        {
            switch (realoperation[])
            {
                case 0x2B:  zwischenergebnis[i] = realzahl[a] + realzahl[a+1];
    
                            break;
                case 0x2D:  zwischenergebnis[i] = realzahl[a] - realzahl[a+1];
    
                            break;
                case 0x2A:  zwischenergebnis[i] = realzahl[a] * realzahl[a+1];
    
                            break;
                case 0x2F:  zwischenergebnis[i] = realzahl[a] / realzahl[a+1];
    
                            break;
            }
            a++;
            i++;
        }
    
        i = 0;
        a = 0;
        b = 0;
        for(i; i <= 16; i++)
        {
            ergebnis = ergebnis + zwischenergebnis[i];
        }
    
        while(rechenzeile[i])
        {
            printf("%c", rechenzeile[i++]);
        }
        printf(" betraegt %d", ergebnis);
    }
    


  • Zunächst mal ein paar Grundsätzliches zu Arrays.
    Bei der Definition gist du die Anzahl der Elemente an.
    Wenn du vier Element willst, musst du auch eine 4 in die Klammern schreiben.
    Da der Index aber bei 0 beginnt, sind diese von 0 bis 3 durchnummeriert.

    Preisfrage: Wie groß ist das Array?

    int  j = 0;
    char zahl[j];
    

    Arrays sind in C statisch. einmal definiert, behalten sie ihre Länge.

    Und Parmeter werden bei Funktionen durch Komma getrennt.
    Aber das wird dir auch der Compiler mitteilen.
    Und beachte dabei auch die Warnungen, nicht nur die Fehler.




Log in to reply