komm nicht weiter....



  • Guten Abend,
    mein Programm soll eine Zeichenkette in der form von
    z.B. 2+4*2-1
    einlesen können und dann verarbeiten...
    natürlich sollte hierbei auf Punkt vor Strich geachtet werden
    und es dürfen auch keine klammern gesetzt werden.

    Mein Logik:
    1. Suche nach * oder / in der Zeichenkette
    2. gehe von dieser Position einmal nach Rechts weg bis ein + oder - kommt
    und bilde den Int wert
    3. gehe von der * oder / Position nach links weg bis + oder - und
    bilde den Int wert

    Wenn ich das Programm starte kann ich die Zeichenkette eingeben,
    aber danach stürzt es ab 😡

    Wäre nett, wenn mir jemand helfen könnte 🙂

    #include <stdio.h>
    
    int main(){
        char c_eingabe[20];
        char c_zeichen;
        int value1=0, value2=0,i,z,i_wert;
    
        printf("Eingabe: ");
        scanf("%s",c_eingabe);
    
        for (i=0;i<20;i++)
        {
          if( c_eingabe[i] == '\0' || c_eingabe[i] == '\n' )
          break;
    
            if(c_eingabe[i] == '*'|| c_eingabe[i] == '/')
            {
            c_zeichen = c_eingabe[i];
            z=i+1;
            value1=0;
            while (c_eingabe[z] != '+' || c_eingabe[z] != '-' || c_eingabe[z] != '\0' || c_eingabe[z] != '\n' )
            {
                c_eingabe[z] -= '0';
                value1 = value1 * 10 + c_eingabe[z];
                z++;
                }
    
            z=i-1;
            value2=0;
            while (c_eingabe[z] != '+' || c_eingabe[z] != '-' || c_eingabe[z] != '\0' || c_eingabe[z] != '\n' || z < 0 )
            {
                c_eingabe[z] -= '0';
                if(z==i-1)
                value2 = c_eingabe[z];
                else
                value2 = c_eingabe[z]*10+value2;
                z--;
                }
    
            switch (c_zeichen)
            {
                case '*':i_wert=value2*value1;
                case '/':i_wert=value2/value1;
                }
            printf("%i\n",i_wert);
            }
            }
            getchar();
    
        return 0;
    }
    


  • Vor 3 Tagen hier im Forum: http://www.c-plusplus.net/forum/277611
    Ist zwar nicht viel, aber vielleicht hilft es bei der Logik.



  • Folgende 2 Punkte:

    // Wenn i==0 beim ersten Schleifendurchlauf so wird z==-1. Folge: c_eingabe[-1] > undefiniertes Verhalten
    z=i-1;
    
    /*
    Die Schleife wird durchgefuehrt, wenn c_eingabe[z] == '+', weil c_eingabe[z] != '-' ... >> ich vermute, dass die OR's (||) wohl doch eher AND's (&&) sein sollen.
    Auch wird die Schleife durchgefuehrt, wenn z kleiner 0 (z < 0), das würde wieder fuer c_eingabe undefiniertes Verhalten bedeuten, da z um 1 vermindert wird. Vielleicht dann doch eher z>0
    */
    while (c_eingabe[z] != '+' || c_eingabe[z] != '-' || c_eingabe[z] != '\0' || c_eingabe[z] != '\n' || z < 0 )
    


  • BasicMan01 schrieb:

    Folgende 2 Punkte:

    Wenn i==0 beim ersten Schleifendurchlauf so wird z==-1. Folge: c_eingabe[-1] > undefiniertes Verhalten

    ich vermute, dass die OR's (||) wohl doch eher AND's (&&) sein sollen.
    Auch wird die Schleife durchgefuehrt, wenn z kleiner 0 (z < 0)

    Stimmt von der Logik her sollten das lieber && als || sein^^
    auch z muss natürlich > 0 sein...

    Allerdings wird im ersten Schleifendurchlauf z nicht -1
    Da ein * bzw / an der indexstelle 0 wenig Sinn macht...

    Habe die Fehler ausgebessert, nun stürzt das Programm schon mal nicht mehr ab
    gibt aber immer noch als Ergebnis 0 aus 😃

    Vielen Dank für eure Hilfe soweit^^



  • Und als Testfall kannst du dann z.B. benutzen:

    http://www.ideone.com/qSOKC


Anmelden zum Antworten