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 🙂


Anmelden zum Antworten