Witam, treść polecenia brzmi następująco:
Napisz program, który wypełni tablicę wartościami odczytanymi z pliku tekstowego dane.txt. Plik tekstowy zawiera jedną kolumnę i dowolną ilość wierszy. Policz wiersze korzystając z funkcji feof i zaalokuj odpowiednią tablicę. Wypisz tablicę na ekran. Korzystając z funkcji realloc zmień rozmiar tablicy o wartość podaną przez użytkownika. Jeżeli użytkownik zdecydował się zwiększyć rozmiar tablicy to do nowych komórek wpisz wartości pseudolosowe z przedziału od 5 do 6. Jeszcze raz wypisz tablicę na ekran.
Polcenie wykonałem, kod napisałem. Dane ładnie wczytuje z pliku, wyrzuca je na ekran, liczy ile ich jest, natomiast problem się pojawia gdy wypełnia tablicę tymi odczytanymi danymi. Tablica zawiera kompletne bzdury. Z resztą jeśli ktoś ma ochote pomóc to polecam samemu sobie skompilować i zobaczyć co się dzieje. Aby program się kompilował, zróbcie sobie plik tekstowy dane.txt w którym jest jedna kolumna osiemnastu liczb całkowitych, wpiszcie sobie jakie chcecie. Załączam kod.
#include<stdio.h>
#include<string.h>
#include<math.h>
#include <stdlib.h>
#include <time.h>
void wczytaj()
{
FILE *plik;
int liczba,licznik=0;
int* tab;
int i=0;
int wiersz;
plik = fopen("dane.txt","r"); //otwieramy plik tutaj
if (plik == NULL) // sprawdzamy czy plik nie jest pusty
{
printf("Blad otwarcia pliku \"dane.txt\"\n");
}
while(feof(plik) == 0) // wykonuj pêtle dopóki plik nie jest pusty. feof Zwraca wartoœæ ró¿n¹ od zera gdy zosta³ osi¹gniêty koniec pliku
{
fscanf(plik,"%d",&liczba); //wczytujemy i wyswietlamy na ekran zawartosc pliku
licznik++;
printf("%d\n",liczba);
}
printf("licznik %d",licznik);
tab = (int*)malloc(licznik*sizeof(int));
/* to jest niepotrzebne
while(feof(plik) == 0)
{
fscanf(plik,"%d",&liczba);
tab[i]=liczba;
printf("%d",tab[i]);
i++;
}*/
printf("\n");
for(int j=0;j < licznik; j++)
{
fscanf(plik,"%d",&wiersz);
tab[j] = wiersz;
printf("%d \n",tab[j]);
}
printf("\n");
int licznik1;
printf("podaj nowy zakres tablicy");
printf("\n");
scanf("%d",&licznik1);
tab=(int*)realloc(tab, licznik1*sizeof(int));
for(int u=licznik ; u < licznik1 ; u++)
{
tab[u] = rand()%5+6;
}
for(int q=0; q < licznik+licznik1 ; q++)
{
printf("\n %d",tab[q]);
}
fclose(plik);
}
int main()
{
wczytaj();
return 0;
}