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

Wczytywanie ścieżki, nazwy, pliku z klawiatury

Ostatnio zmodyfikowano 2015-02-12 15:12
Autor Wiadomość
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:

C/C++
#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).
P-126344
Monika90
» 2015-02-11 16:05:07
C/C++
char x;
to jest jeden znak, użyj tablicy znaków i wczytaj tekst za pomocą fgets.
P-126348
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ść?
P-126352
Brunon3
» 2015-02-11 17:16:31
Użyj
const char * x;

Btw ja polecam fstream do takich rzeczy. ;)
P-126353
Monika90
» 2015-02-11 17:29:44
Użyj const char * x;
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ąć.
P-126356
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?
P-126359
Monika90
» 2015-02-11 17:57:05
można tak to zrobić
C/C++
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++
P-126360
Dalir
Temat założony przez niniejszego użytkownika
» 2015-02-11 18:03:05
A jak wyglądałoby to w C++?
P-126362
« 1 » 2
  Strona 1 z 2 Następna strona