[C] program wykonujacy operacje na plikach

0

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;
}
0

scanf("%d",&n); // - dlaczego ten scanf tutaj nie dziala (czyzby cos zalegalo w buforze?)

daj spacje przed '%', powinno zadzialac. ew wyczysc bufor

0

okej przejrzalem dokladniej. kod ponizej dziala zgodnie z zalozeniem

#include <stdio.h>

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) {
        int dum;
        fscanf(fp, "%d\n", &dum);
        printf("%d\n", dum);
// nie mozna bezposrednio wczytywac z czegos na stdin (choc chyba chodzilo Ci o stdout) bo to do czego wczytujemy musi byc zgodne z podanym 'parameter format' a bynajmniej %d nie jest formatem stdout
        ++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]);
        ++j;
    }

    printf("podaj nowy rozmiar tablicy\n");
    int n;
    scanf("%d", &n); // mi ten scanf dziala w NetBeans, nawet bez czyszczenia bufora

    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;
}
0

ok, dzieki, teraz wszystko gra

1 użytkowników online, w tym zalogowanych: 0, gości: 1