Browse Source

add detection if formula parse is finished

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

31
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);
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){

Loading…
Cancel
Save