C
Diamond schrieb:
So wie ich das sehe, lässt du das 5x durchlaufen.
Bei jedem Mal prüft er, ob er etwas gefunden hat, wobei ich da nicht durch sehe, im ersten if fehlt ein ), weiterhin wird if nicht mit ; beendet.
Genau, wenn du das noch optimieren willst, kannst du ja schreiben:
int gefunden=0;
for(int i=0;gefunden||i<5;++i)
if(strstr(...)) gefunden=1;
if(!gefunden)
// lösche Zeile
int gefunden=0;
for(int i=0;i<5;++i)
if(strstr(...)){gefunden=1;break;}
if(!gefunden)
// lösche Zeile
Außerdem, wozu das 2. if? Du nutzt kein {, daher führt er nur die Zeile nach dem if aus, aber da du ja schon airgendwie prüfst, ob gefunden=1 ist, kann gefunden doch nicht NULL sein!
Nein. In der Schleife überprüfe ich, ob das gerade aktuelle Wort vorkommt und setze im Ernstfall "gefunden" auf 1. Wenn alle Tests negativ gelaufen sind, steht am Schleifenende "gefunden" noch auf 0 (Startwert) und die Bedingung "if(!gefunden)" wird wahr.
Habe jetzt noch kurz was geändert, es müsste gehen, ich weiss nur nicht warum!
for(k=0;k<=4;k++)
{
cfound=strstr(Zeilen.sZ[j], sVariable[k]);
if(k==4 && cfound==NULL)
{
// Löschschleife
}
}
Das Problem ist auch j! Habe vor die 3. for Schleife ne Ausgabe für j gemacht und naja, am Anfang steht da: 0, 1 dann keine 2, weiter mit 3! Warum weiss ich auch nicht -.- Aber hab nachgesehn, in der .c steht in der 3. Zeile das
typedef struct foo
wieso springt er da nicht in das if? Keins der gesuchten Wörter ist da drin!
Dein Fehler ist die Bedingung: Du prüfst nach, ob k=4 UND cFound=NULL ist - also springt das if() immer dann an, wenn in der Zeile dein fünftes Suchwort ("char")nicht vorkommt.
p.s. das "löschen" der Zeilen ist doch an sich leicht:
Zeile 6 soll weg. Schreibe Zeile 7 in Buffer und Buffer in Zeile 6. Dann Zeile 8 in 7 usw.
Mach's doch noch einfacher:
for(i=j;i<Zeilenanzahl-1;++i) strcpy(Zeilen[i],Zeilen[i+1])
Zeilenanzahl--;
PS: du solltest vielleicht ein "#define NUM_KEYS 5" verwenden, statt die "4" überall im Programm hart einzuarbeiten