Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

C++ Odczyt z pliku txt. Gdzie jest błąd?

07 Jan 2008 14:32 1395 2
  • Level 12  
    witam

    Mam problem jak w temacie, oto kod programu który odczytuje plik o nazwie r.txt w którym zapisany jest pewien ciąg znaków.

    Code:
    #include <stdio.h>
    
    #include <stdlib.h>

    int main()
    {
    FILE *stream;
    char list;
    int numread,i=1;
    if( (stream = fopen( "r.txt", "r" )) != NULL )
    {
        while(list != EOF)
        {
            fscanf(stream,"%c",&list);
            printf("%c",list);
            fseek ( stream ,i ,SEEK_SET );
            i++;
        }

    fclose( stream );
    }
    else
    printf( "File r.txt could not be opened\n" );
    system("pause");
    return 0;
    }


    Program się kompiluje wyświetla strumień znaków jednak nie napotyka na znak końca pliku (EOF) dlaczego?
  • Helpful post
    Level 34  
    1. Ten program to czyste C, nie C++.
    2. Brak inicjalizacji zmiennej list.
    3. Odpowiedź właściwa: bo EOF to nie znak, a specjalny symbol (typu int, nie char :!:) zwracany przez funkcje takie jak getc() i getchar(). fscanf nigdy nie wczyta tego symbolu do zmiennej poprzez %c. Raczej, w wypadku końca pliku funkcja fscanf() zwróci EOF.
  • Level 12  
    wielkie dzięki już poprawiłem program, nigdzie nie mogłem znaleźć jakichś dobrych wskazówek jeszcze raz dziękuję ;)

    oto kod działającego programu:

    Code:

    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
    FILE *stream;
    char list;
    int numread,i=1;
    if( (stream = fopen( "r.txt", "r" )) != NULL )
    {
        while(fscanf(stream,"%c",&list) != EOF)
        {
            printf("%c",list);
            fseek ( stream ,i ,SEEK_SET );
            i++;
        }
    fclose( stream );
    }
    else
    printf( "File r.txt could not be opened\n" );
    system("pause");
    return 0;
    }


    temat uważam za zamknięty ;)