Napisalem taki program (tresc w komentarzu), moje pytania, watpliwosci rowniez w komentarzu :)
#include <stdio.h>
/*Napisz program, który wypełni tablicę wartościami odczytanymi z pliku tekstowego. 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. Zapisz cała tablicę do pliku binarnego. */
int main()
{
FILE *fp=fopen("plik.txt", "r");
if (fp==NULL)
printf("BLAD OTWARCIA");
printf("Otwarto plik plik.txt do odczytu\n");
int i=0;
while (feof(fp)==0)
{
fscanf(fp, "%d\n", stdin); // dlaczego ta instrukcja nie wypisuje po kolej liczb z pliku na ekran?
/*fscanf(fp, "%d\n", &nr[i]);
printf("%d %d\n", i+1, nr[i]);*/
++i;
}
printf("plik ma %d linii\n",i);
int *tab=(int*)malloc(i*sizeof(int));
int j=0;
FILE *q=fopen("plik.txt", "r");
if (q==NULL)
printf("BLAD OTWARCIA");
printf("zapisze liczby z pliku do tablicy tab\n");
while (feof(q)==0)
{
fscanf(q, "%d\n", &tab[j]);
//printf("%d %d\n", j+1, tab[j]);
++j;
}
printf("podaj nowy rozmiar tablicy\n");
int n;
scanf("%d",&n); // - dlaczego ten scanf tutaj nie dziala (czyzby cos zalegalo w buforze?)
//int n =20; - dla okreslonego n program dalej dziala ok;
if (n>i)
tab=(int*)realloc(tab, (i+n)*sizeof(int));
else
tab=(int*)realloc(tab, n*sizeof(int));
if (n>i)
for (j=i; j<n; j++)
tab[j]=5+rand()%(6-5+1); //a+...(b-a+1)
for (j=0; j<n; j++)
printf("%d\n", tab[j]);
FILE *kn=fopen("nowy.txt", "w");
for(i = 0; i < n; i++)
{
fprintf(kn, "%d\n", tab[i]);
}
fclose(q);
fclose(fp);
return 0;
}