diff --git a/src/inputHandling.c b/src/inputHandling.c index efa40c9..e579f27 100644 --- a/src/inputHandling.c +++ b/src/inputHandling.c @@ -7,7 +7,7 @@ char a[STRINGL]; void deleteWhitespace(); 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); @@ -16,10 +16,16 @@ void input() { fgets(a, STRINGL, stdin); //fgets statt scanf, holt den kompletten String inkl. Whitespace deleteWhitespace(); calc_op temp; + char data[STRINGL]; + memcpy(data,a,STRINGL); 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 @@ -48,8 +54,9 @@ op readFunction(char* data, int length){ } //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; char delimiter; switch (structure_ref->funktionstyp) { @@ -65,16 +72,22 @@ void getnumbers(char* data, int length, calc_op* structure_ref){ //input sind: s case opMult: delimiter = '*'; 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) { - structure_ref->array[i]=atof(token); // String zu double konvertiert + structure_ref->array[i] = atof(token); // String zu double konvertiert i++; + splitPnt = token; token = strtok(NULL, "+"); //Sucht von der letzten Plus-Stelle an weiter } 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){