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. |
|
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 |
|
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. |
|
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ć... |
|
killjoy |
» 2013-01-23 02:43:50 Napiszę ci taki kod po łebkach :P. 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 { } }
Coś takiego jakby były błędy to mów pisane na szybkiego na oko :) |
|
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 |
|
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) 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++; }
|
|
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 :) |
|
1 « 2 » 3 |