Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

operacja na plikach - sprawdzanie zawartosci

Ostatnio zmodyfikowano 2013-01-23 17:05
Autor Wiadomość
killjoy
» 2013-01-23 01:55:33
Na pierwszy rzut oka mogę ci powiedzieć czemu nie działa spr. czy plik jest pusty, funkcja fopen() zwraca NULL, jeżeli nie znajdzie pliku, a nie jeżeli takowy jest pusty.

/edit

Co do spr czy jest litera czy nie, powiedz mi ty chcesz wywalić użytkownikowi błąd, czy poprostu wczytać plik, bo fscanf(), jeżeli znajdzie coś co nie jest objęte specyfikatorem %d (tak to się nazywa? :P), to poprostu wczyta następny znak.
P-74774
ogipierogi
Temat założony przez niniejszego użytkownika
» 2013-01-23 02:27:27
ach ....
dobrze już rozumiem czemu to nie działało, ale jak w takim razie sprawdzić czy plik jest pusty?

chciałbym aby został wywalony komunikat, ze w pliku znalzała się, lub są litery
P-74776
killjoy
» 2013-01-23 02:32:49
Sprawdzanie czy plik jest pusty jest proste poprostu pobierz pierwszy znak i jeżeli bedzie to NULL to wywal że jest pusty, tylko pobieraj przy operatorze "%c".

Co do liter, najprostszy sposób jaki mi przychodzi do głowy, to pobranie znaków jako tekst i spr czy wartość danego znaku jest z zakresu liczb w kodowaniu ASCII.
P-74777
ogipierogi
Temat założony przez niniejszego użytkownika
» 2013-01-23 02:36:25
mógłbyś to zaimplementować? już mam taki mętlik w głowie że sam nie wiem jak to napisać...
P-74778
killjoy
» 2013-01-23 02:43:50
Napiszę ci taki kod po łebkach :P.

C/C++
char znak_z_pliku;

while( fscanf( plik_czyt, "%c", & znak_z_pliku ) != EOF )
{
   
    if( znak_z_pliku >= 48 && znak_z_pliku <= 57 )
    {
       
       
        printf( "Odczytano: %c\n", znak_z_pliku );
       
        znak_z_pliku -= 48;
        AddElement( tab, znak_z_pliku );
        i++;
       
        znak = fgetc( plik_czyt );
        if( znak == '\n' )
             wiersz++;
       
    }
    else {
       
        //Tu Se Wywal Błąd :P
       
    }
   
   
   
}

Coś takiego jakby były błędy to mów pisane na szybkiego na oko :)

          
P-74779
ogipierogi
Temat założony przez niniejszego użytkownika
» 2013-01-23 11:56:34
kurcze, próbowałe też z Ascii ale już nie dziwne ze nie dzialalo.... :p pomylilem numery.
dzieki, zaraz to poprawie sobie
P-74793
ogipierogi
Temat założony przez niniejszego użytkownika
» 2013-01-23 13:14:10
co do sprawdzenia czy w pliku są liczby napsiałem coś takeigo, lecz w działaniu programu nic to nie zmienia (czytaj nie działa)
C/C++
if(( plik_czyt = fopen( nazwa, "r" ) ) != NULL )
{
    while( fscanf( plik_czyt, "%d", & liczba ) != EOF )
    {
        if( liczba >= 48 && liczba <= 57 )
        {
            printf( "Odczytano: %d\n", liczba );
            AddElement( tab, liczba );
            i++;
        }
        else
        {
            printf( "Plik zawiera litery\n" );
        }
        znak = fgetc( plik_czyt );
        if( znak == '\n' )
             wiersz++;
       
    }
P-74804
killjoy
» 2013-01-23 15:34:32
Używasz złego operatora w fscanf(), zamiast "%d"(To pobiera TYLKO liczby int, inne znaki pomija), powinno być "%c"(Ten pobiera wszystkie znaki w kodowaniu ASCII). Pzatym jeżeli zapiszesz bezpośrednio do tablicy, to co ci poda funkcja przy operatorze "%c", to będziesz miał kod ASCII znaku, więc najprostszym sposobem żeby przekonwertować cyfry z ASCII na int, jest odjąć od danej wartości 48 czyli innymi słowy
liczba-=48 i tą wartość skopiować do tablicy int. Mam nadzieje że zrozumiesz :)
P-74812
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona