Filterschleife
-
hallo,
ich habe eine einleseschleife die wunderbar funkt
dann hab ich noch eine schleife die eigentlich teile filtern sollte aber es nicht tut.while(fgets(Alles, sizeof(Alles), stdin)) { strcat(Temp,token = strtok( Alles, seps )); while(token=strtok(NULL,seps)) {strcat(Temp,token); /* hier dazwischen sind meine if-bedingungen zum filtern */ } }
könnt ihr mir sagen was ich falsch mache??
mfg saroll
-
sizeof(Alles) bei fgets glaub ich passt nicht.
Da wird ja nur die größe des Pointers ausgewertet oder?
Und die is immer 4.Du musst die größe des Buffers angeben auf den der (const) Pointer zeigt. Die Anzahl der Character die maximal gelesen werden.
-
nein, das wars nicht, trotzdem danke
mein problem ist das die blöde schleife nicht die ganze zeile filtert...
ich bräuchte die schleife so das sie einen teil der teile nimmt, eben bis zu dem nächsten gesuchten zeichen und denn dann einfach an die if bedingungen weitergibt... damit ich dann schaun kann was in dem string drinsteht...
-
du weißt, daß du da eine Endlosschleife gebaut hast
mit while(fgets(Alles, sizeof(Alles), stdin)) ?!!
schau dir mal an was du da überhaupt macht, indem du dir ein paar display einbaust, zB:char Alles[256], seps[3]={',','.'}/*zum testen*/, Temp[256]={' '}, *token; int i=0; printf(Temp); while(fgets(Alles, sizeof(Alles), stdin)) { strcat(Temp,token = strtok( Alles, seps )); printf(Temp);printf(token); while(token=strtok(NULL,seps)) { strcat(Temp,token); printf(Temp);printf(token); /* hier dazwischen sind meine if-bedingungen zum filtern */ } }
was willst du denn filtern?? Welche Teile?
Zitat:'noch eine schleife die eigentlich teile filtern sollte aber es nicht tut.'
da kann man sich eine Menge drunter vorstellen...
-
also:
ich hab sequencen, in dem fall sind es '\x1B' und zwischen diesen dingern stehen die befehle die ich raushaben will, ich muss die aber noch prüfen können um zu wissen welcher es ist...
mfg saroll
-
ich kenne deinen Vergleich nicht, aber denke auch mal an whitespaces (zB blanks !!); darauf ist der Vergleich auch sensibel!
ich weiß nicht, ob dir das hilft, aber schau dir das hier mal an:char Alles[256], seps[3]={',','.'}, Temp[256]={' '}, *token; char * commands[3]={"command00", "command01", "command02"}; fgets(Alles, sizeof(Alles), stdin); strcat(Temp,token = strtok( Alles, seps )); if( strcmp(commands[0],token)==0 ){ printf("command 00 found"); } else{ if( strcmp(commands[1],token)==0 ){ printf("command 01 found"); } else{ if( strcmp(commands[2],token)==0 ){ printf("command 02 found"); } } } while( token=strtok(NULL,seps) ){ strcat(Temp,token); if( strcmp(commands[0],token)==0 ){ printf("command 00 found"); } else{ if( strcmp(commands[1],token)==0 ){ printf("command 01 found"); } else{ if( strcmp(commands[2],token)==0 ){ printf("command 02 found"); } } } } printf(Temp);
@all: dies ist nur ein noch verbesserungsfähiges Bsp -> suboptimal
-
danke freshman!!
ich hab es so:
char Alles[256], seps[3]={',','.'}/*zum testen*/, Temp[256]={' '}, *token; int i=0; printf(Temp); while(fgets(Alles, sizeof(Alles), stdin)) { strcat(Temp,token = strtok( Alles, seps )); printf(Temp);printf(token); while(token=strtok(NULL,seps)) { strcat(Temp,token); printf(Temp);printf(token); /* hier dazwischen sind meine if-bedingungen zum filtern */ } }
zusammengebraucht
ich hab nen verdammt blöden sch... fehler gemacht
aber jetzt hab ichs geschaft...danke nochmal!!
mfg saroll
-
freshman schrieb:
du weißt, daß du da eine Endlosschleife gebaut hast
mit while(fgets(Alles, sizeof(Alles), stdin)) ?!!Warum sollte das eine Endlosschleife sein??
-
im klassischen Sinne ist das natürlich keine Endlosschleife, aber mit welcher Eingabe kommt man denn aus dieser Schleife raus?
zBchar Alles[256]; while(fgets(Alles, sizeof(Alles), stdin));
-
deadlef.told(me):
bei Einlesen über Konsole s.o.: Abbruch der Schleife durch Tastenkombination
Strg + Z
-
Sorry, muss mich nochmal einschalten:
Strg+Z stimmt für WinDOS-Betriebssysteme, unter Linux und anderen Betriebssystemen nicht, das ist jeweils unterschiedlich.
Müsste aber eigentlich was zu in der Konsolen-FAQ stehen.
[edit]Wurstfinger! Tippfehler hoch 10[/edit]