Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

Czytanie zpliku - dziwny problem

Polecane posty

Mam problem bardzo dziwny, i nie mam pojecia czemu sie dzieje tak, jak sie dzieje:

Mam taki kod:

int main(void)
{
    //odczyt z pliku danych do posortowania
    unsigned int n;
    unsigned int i=0;
    char nazwa[100];
    int dane[n];
    printf("Podaj nazwe pliku do odczytu\n");
    scanf("%s", &nazwa);
    FILE *file;
    if((file = fopen (nazwa, "r"))==NULL)
    {
    printf("Taki plik nie istnieje\n");
    exit (1);
    }
    while((fscanf(file, "%d ", &dane[i]))!=EOF)
    i++;
    
    fclose(file);
    n=i;
    for(i=0;i<n;i++)
    printf("%d ", dane[i]);
    
    getchar();
    getchar();
    return 0;
}

Program ten wczytuje mi z pliku liczby calkowite do 17 indeksu tablicy. Kiedy wpisze wiecej liczb program sie zawiesza. Nie mam pojcia o co chodzi. Z gory dzieki za pomoc, bo pewne gdzies zrobilem jakis banalny blad ;)

Link do komentarza
Udostępnij na innych stronach

No nie podaje jej bo z zalozenia chcialem zrobic, aby nie wyznaczac sobie zakresu. Ale widze, ze jesli ustale jakas np bardzo duza wartosc to faktycznie program normalnie odczytuje liczby, wiec jest ok. Jednak program ten bede musial wykorzystac do sortowania bardzo wielu liczb w celu sprawdzania wydajnosci roznych metod sortowania. Dlatego nie wiem czy wystarczy, ze okresle n (teoretycznie jakas bardzo duza liczba powinna wystarczyc), czy jest jakis inny sposob, aby nie ustalac zakresu (chyba tablice dynamiczne, ale jeszcze nie jestem z nimi za pan brat :)).

Link do komentarza
Udostępnij na innych stronach

Kompilujesz to w c ?

Nigdy nie pojmę, czemu konstrukcja

int n;
int tab[n];

jest dopuszczalna.

Tak czy siak, trzeba zrobić tak jak napisał wies.niak, czyli zaalokować pamięć:

FILE * file = fopen(...);
fseek(file, 0, SEEK_END);
int size = ftell(file);
fseek(file, 0, SEEK_SET);

int * tab = (int *) malloc(size);

fseek

ftell

malloc

Alokowaną pamięć TRZEBA zwolnić: free

free(tab);

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...