Browse Source

add detection if formula parse is finished

remotes/origin/Input_Handling
Sophia Weber 11 months ago
parent
commit
043e820946
  1. 33
      src/inputHandling.c

33
src/inputHandling.c

@ -7,7 +7,7 @@
char a[STRINGL]; char a[STRINGL];
void deleteWhitespace(); void deleteWhitespace();
op readFunction(char* data, int length); op readFunction(char* data, int length);
void getnumbers(char* data, int length, calc_op* structure_ref);
char* getnumbers(char* data, int length, calc_op* structure_ref);
void printstruct(calc_op* formula); void printstruct(calc_op* formula);
@ -16,10 +16,16 @@ void input() {
fgets(a, STRINGL, stdin); //fgets statt scanf, holt den kompletten String inkl. Whitespace fgets(a, STRINGL, stdin); //fgets statt scanf, holt den kompletten String inkl. Whitespace
deleteWhitespace(); deleteWhitespace();
calc_op temp; calc_op temp;
char data[STRINGL];
memcpy(data,a,STRINGL);
temp.formel = a; temp.formel = a;
temp.funktionstyp = readFunction(a, 10);
getnumbers(a,STRINGL, &temp);
printstruct(&temp);
temp.funktionstyp = readFunction(data, 10);
if (getnumbers(data,STRINGL, &temp) == NULL){
printstruct(&temp);
} else {
printf("Formular %s not supported", temp.formel);
}
} }
//Leerzeichen löschen //Leerzeichen löschen
@ -48,8 +54,9 @@ op readFunction(char* data, int length){
} }
//Zahlen auslesen (+) //Zahlen auslesen (+)
void getnumbers(char* data, int length, calc_op* structure_ref){ //input sind: string, länge vom String, berechnungsstruct
char tmp[length];
char* getnumbers(char* data, int length, calc_op* structure_ref){ //input sind: string, länge vom String, berechnungsstruct
// char tmp[length];
char* splitPnt;
int i = 0; int i = 0;
char delimiter; char delimiter;
switch (structure_ref->funktionstyp) { switch (structure_ref->funktionstyp) {
@ -65,16 +72,22 @@ void getnumbers(char* data, int length, calc_op* structure_ref){ //input sind: s
case opMult: case opMult:
delimiter = '*'; delimiter = '*';
break; break;
default: return;
default: return NULL;
} }
memcpy(tmp, data, length); //string kopiert
char *token = strtok(tmp, &delimiter); //An der Stelle von dem ersten Plus wird ein NULL (Stringende) gesetzt
// memcpy(tmp, data, length); //string kopiert
char *token = strtok(data, &delimiter); //An der Stelle von dem ersten Plus wird ein NULL (Stringende) gesetzt
while (token != NULL) { while (token != NULL) {
structure_ref->array[i]=atof(token); // String zu double konvertiert
structure_ref->array[i] = atof(token); // String zu double konvertiert
i++; i++;
splitPnt = token;
token = strtok(NULL, "+"); //Sucht von der letzten Plus-Stelle an weiter token = strtok(NULL, "+"); //Sucht von der letzten Plus-Stelle an weiter
} }
structure_ref->arraylength=i; //Länge des Arrays (also zu berechnende Zahlen) gespeichert structure_ref->arraylength=i; //Länge des Arrays (also zu berechnende Zahlen) gespeichert
if (readFunction(splitPnt, strlen(splitPnt)!=opNotSupported)){
return splitPnt;
} else {
return NULL;
}
} }
void printstruct(calc_op* formula){ void printstruct(calc_op* formula){

Loading…
Cancel
Save