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 wertWenn ich das Programm starte kann ich die Zeichenkette eingeben,
aber danach stürzt es abWä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 ausVielen Dank für eure Hilfe soweit^^
-
Und als Testfall kannst du dann z.B. benutzen: