Problem bei Bedingung
-
Hi, hier erstmal der Code:
#include <stdio.h> #include <string.h> #include <stdlib.h> void Hilfe() { int iLaenge=0; int iCodezeileA=0; int iCodezeileE=0; int i=0; FILE *FHilfedatei; FILE *FIndex; char sSeite[8]; char sZeile[255]; char *pZahl; char *pCodeA; char *pCodeE; char sBuffer[255]; FHilfedatei=fopen("Hilfesystem.xml", "r"); if(!FHilfedatei) { printf("Hilfedatei nicht vorhanden oder Fehler.\n"); } else { FIndex=fopen("Index.txt", "r"); if(!FIndex) { printf("Index nicht vorhanden oder Fehler!\n"); } else { printf("Hilfeseite auswaehlen: "); scanf("%s", &sSeite); do{ fgets(sZeile, 253, FIndex);//Zeilenweise lesen pZahl=strtok(sZeile, ":-\n");//Zahl vor : "abschneiden" pCodeA=strtok(NULL, ":-\n");//Zahl nach : und bis - "abschneiden" pCodeE=strtok(NULL, ":-\n");//Zahl nach - und bis \n "abschneiden" }while(strcmp(pZahl, sSeite) || !feof(FIndex));//Vergleich eingegebene Zahl mit Zahl vor : } iCodezeileA=atoi(pCodeA);//String in int umwandeln if(pCodeE!=NULL) { iCodezeileE=atoi(pCodeE);//String in int umwandeln for(i=0;i<iCodezeileA-1;i++)//Lesen bis zur Codezeile { fgets(sBuffer, 253, FHilfedatei); } for(i=iCodezeileA;i<=iCodezeileE;i++) { fgets(sBuffer, 253, FHilfedatei); printf("%s", sBuffer); } } else { for(i=0;i<iCodezeileA;i++)//Lesen bis zur Codezeile { fgets(sBuffer, 253, FHilfedatei); } printf("%s\n\n", sBuffer); } } fclose(FIndex); fclose(FHilfedatei); } int main() { Hilfe(); return 0; }
Hilfesystem.xml
<Hilfetext> <index>10</index> <Text> TEST u465 4235t wtg wt436t34636ztdr hgbdhgbdrhd </Text> <index>20</index> <Text> check sdg ssdg a f sdg a f wr e tet r etz 3 4wert wer 3546737ze5rtger te tw 4343t4 </Text> <index>30</index> <Text> tester </Text> <index>40</index> <Text> name </Text> <index>50</index> <Text> buu </Text> </Hilfetext>
Index.txt
10:4-8 20:12-17 30:21 40:25 50:29
Nun ist es so, alles geht, nur will ich noch wenn man ne Nummer eingibt, die es nicht in der Index gibt, dass dann ein Fehler kommt. Leider geht der aus der Schleife nicht mit !feof(FIndex) raus, ich weiss nicht warum! Er bleibt so lange drin, bis entweder die eingegebene Zahl in der Datei gefunden wurde oder ich nen Speicherüberlauf habe ^^ weil das feof nicht greift!
Wenn ich die feof Überprüfung aus dem while lösche gehts mit den Zeilen finden, wenn ich nur feof drin habe bricht er auch am Ende ab, nur wenn ich es mit ODER zusammenbringe geht es nicht, wieso? Eine andere Lösung fiel mir net ein!
-
Versuchs so
while(strcmp(pZahl, sSeite) && !feof(FIndex));
bei || wird auf feof() nicht mehr getestet wenn die zahlen ungleich sind, beim nächsten mal sind sie wieder ungleich ......
Kurt
-
Danke, hat wunderbar geklappt