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

[C] Wczytywanie danych z pliku o określonej nazwie.

Ostatnio zmodyfikowano 2016-01-06 19:36
Autor Wiadomość
macwie
Temat założony przez niniejszego użytkownika
[C] Wczytywanie danych z pliku o określonej nazwie.
» 2016-01-06 13:35:24
Witam, chcę by użytkownik podawał nazwę pliku (wraz z rozszerzeniem), a następnie informacje z danego pliku byłyby wczytywane do tablicy.

Napisałem coś takiego:
Funkcja:
C/C++
char * load( char nazwa[] )
{
    char temp[ 80 ], tab_dan[ 150 ];
    int i = 0;
    FILE * plik = fopen( nazwa, "r" );
    if( plik == NULL )
    {
        printf( "Blad z wczytaniem bazy danych!" );
    }
    else
    {
        while( fgets( temp, 80, plik ) != NULL )
        {
            strcpy( tab_dan[ i ], temp );
            i++
        }
    }
    return tab_dan;
}
a w main:
C/C++
char * tab;
char nazwa[ 80 ];
fgets( nazwa, 80, stdin );
tab = load( nazwa );

I wyskakuje mi printf, że plik jest NULL'em. Co robię nie tak ? Dodamy tylko, że jak dam, np load("nazwa.txt"); to wszystko działa.
P-142961
carlosmay
» 2016-01-06 14:48:32
tab_dan[ 150 ];
 powinna być dynamiczna, bo w tym przypadku jest lokalna i po wyjściu z funkcji jest usuwana.
P-142972
macwie
Temat założony przez niniejszego użytkownika
» 2016-01-06 15:25:30
No ale co z tego, że jest usuwana, jak program nie może nawet otworzyć pliku, a co dopiero pobrać z niego informacje. Nie wykrywa go, choć istnieje w katalogu z programem.
P-142975
Monika90
» 2016-01-06 15:55:08
W jaki sposób pobierasz nazwę od użytkownika?
P-142980
macwie
Temat założony przez niniejszego użytkownika
» 2016-01-06 16:47:29
Pobieram ją, używając fgets() z okna konsoli. Mogę ją później wrzucić do printf() i się pojawi. Może problem w tym, że ustaliłem rozmiar łańcucha znaków na 80, a jak nazwa ma powiedzmy 10 znaków to w pozostałych 70 miejscach są śmieci i fopen() nie rozpoznaje nazwy pliku. To możliwe ?
P-142990
Monika90
» 2016-01-06 17:06:10
fgets zapisuje na końcu łańcucha znak \n, więc musisz go usunąć.
P-142994
macwie
Temat założony przez niniejszego użytkownika
» 2016-01-06 17:28:18
A jakaś mała podpowiedź jak to zrobić ? :)
P-142995
Monika90
» 2016-01-06 18:16:41
C/C++
int i = 0;
while( nazwa[ i ] && nazwa[ i ] != '\n' ) ++i;

nazwa[ i ] = 0;
P-143001
« 1 » 2
  Strona 1 z 2 Następna strona