Ich komm nämlich von selbst nicht drauf.
 
 LG
 
 
Was dahinter steht ist Müll und uninteressant. Du prüfst jedoch trotzdem alle 150 Zeichen des Arrays. Im ersten Durchlauf steht noch Speichermüll im Array, also wird die Anzahl der gefundenen Worte noch stimmen. Jetzt kommt der zweite Schleifendurchlauf. Du überschreibst den Anfang deines Arrays mit folgender Zeichenkette:Doch im Semifinale von Roland Garros verliert Melzer schließlich.\0
Doch jetzt steht dahinter kein Speichermüll mehr, sondern der Rest der ersten Zeile, den du nicht überschrieben hast:Platz 3: Federer passt auf.\0
(Ich hab die Zeichen jetzt nicht gezählt, aber im Prinzip siehts so aus.)Platz 3: Federer passt auf.\0Garros verliert Melzer schließlich.\0

Code: Alles auswählen
#include <stdio.h>
int main(void)
{
    FILE *file;     // Dateizeiger
    int count = 0;  // Anzahl der bereits gezählten Wörter
    int state;      // Zustand des Automaten
    int c;          // eingelesener Buchstabe
    // Datei öffnen und überprüfen
    file = fopen( "text.txt", "r" );
    if ( file == NULL )
    {
        printf( "Fehler beim Öffnen der Datei\n" );
        return -1;
    }
    // Datei auslesen (der Schleifenkopf ist nicht sehr anfängerfreundlich, sollte aber verständlich sein)
    while ( ( c = fgetc( file ) ) != EOF )
    {
        if ( state == 0 && c == 'v' )
            state = 1;
        else if ( state == 1 && c == 'e' )
            state = 2;
        else if ( state == 2 && c == 'r' )
            state = 3;
        else if ( state == 3 && c == 'l' )
            state = 4;
        else if ( state == 4 && c == 'i' )
            state = 5;
        else if ( state == 5 && c == 'e' )
            state = 6;
        else if ( state == 6 && c == 'r' )
            state = 7;
        else if ( state == 7 && c == 't' )
        {
            state = 0;
            ++count;
        }
        else
            state = 0;
    }
    // Datei schließen
    fclose( file );
    // Ausgabe
    printf( "%d\n", count );
    // Programm beenden
    return 0;
}
Code: Alles auswählen
const char *const word = "verliert";    // gesuchtes Wort
int state = 0;                         // aktueller Status, Index von "word"
while ( ( c = fgetc( file ) ) != EOF )
{
  if(c == word[state])           // passender Buchstabe
  {
    state++;                   // nach nächstem Buchstaben suchen
    if(word[state] == '\0')    // Wort wurde komplett gefunden
    {
      count++;                 // Anzahl der Vorkommnisse erhöhen
      state = 0;               // wieder den Anfang des Wortes suchen
    }
  }
  else                           // falscher Buchstabe
    state = 0;                   // wieder den Anfang des Wortes suchen
}Das habe ich ja in meinem letzten Satz auch gesagt, aber man muss ja nicht gleich alles vorsagen.dani93 hat geschrieben:Das mit den ganzen if's kann man doch deutlich schöner lösen...
