Wczytywanie ścieżki, nazwy, pliku z klawiatury
Ostatnio zmodyfikowano 2015-02-12 15:12
Dalir Temat założony przez niniejszego użytkownika |
Wczytywanie ścieżki, nazwy, pliku z klawiatury » 2015-02-11 15:39:08 Chcę zrobić by program czytał plik tekstowy którego nazwę lub ścieżkę wprowadza się samemu. Poniżej jest moja próba: #include<stdio.h>
int main() { FILE * plik = NULL; int znak; char x; scanf( "%c", x ); plik = fopen( x, "r" ); if( plik == NULL ) { perror( "Wystapil blad" ); return 1; } while( feof( plik ) == 0 ) { znak = fgetc( plik ); if( znak != EOF ) printf( "%c\n", znak ); } fclose( plik ); return 0; }
Próbowałem też zamiast scanf dać getchar, ale w obu przypadkach windows kończy prace programu i szuka błędu. Co tu można zrobić? PS. Co zrobić by przy czytaniu pliku nie dawał każdego znaku z pliku w osobnej linii tylko obok siebie (ewentualnie wtedy zawijanie tekstu). |
|
Monika90 |
» 2015-02-11 16:05:07 to jest jeden znak, użyj tablicy znaków i wczytaj tekst za pomocą fgets. |
|
Dalir Temat założony przez niniejszego użytkownika |
» 2015-02-11 17:08:32 I ta tablica powinna być minimalnie duża jak angielski alfabet? Trzeba zadeklarować wtedy każdy element tablicy czy wystarczy podać jej wielkość? |
|
Brunon3 |
» 2015-02-11 17:16:31 Użyj const char * x; Btw ja polecam fstream do takich rzeczy. ;) |
|
Monika90 |
» 2015-02-11 17:29:44 Bardzo zła odpowiedź. Rozmiar tablicy musi być wystarczająco duży, żeby zmieściła się w niej nazwa pliku i kończące zero. Jeżeli będziesz uzywał fgets to musissz też mieć miejsce na znak '\n', który po wczytaniu nazwy pliku musisz usunąć. |
|
Dalir Temat założony przez niniejszego użytkownika |
» 2015-02-11 17:41:32 Z tym alfabetem pomyliło mi się z czymś co jeszcze robię :D
Czyli musi być jakiś odgórnie ustalony rozmiar tablicy? I jeżeli poda się nazwę krótszą niż jej rozmiar to będzie wszystko ok? A jeżeli się przekroczy to program się wysypie czy można się przed tym zabezpieczyć i wypisało by, że nazwa pliku za długa, ale program by kontynuowało? |
|
Monika90 |
» 2015-02-11 17:57:05 można tak to zrobić char name[ 1024 ]; unsigned count = 0;
scanf( " %1023[^\n]%n", name, & count ); if( count == 1023 ) printf( "za dluga nazwa\n" ); else printf( "nazwa to: %s\n", name );
powino być dobrze, najlepiej byłoby jednak użyć C++ |
|
Dalir Temat założony przez niniejszego użytkownika |
» 2015-02-11 18:03:05 A jak wyglądałoby to w C++? |
|
« 1 » 2 |