Obsługa plików i tablica dynamiczna ze stringami

0

Witam wszystkich,
Mam problem z programem. Program ma wczytać z pliku nazwy.txt nazwy plików (każda nazwa w osobnej linii), których zawartość wygląda tak:

  • pierwsza linia: liczba kolumn (np. 6)
  • inne linie: liczby zmiennoprzecinkowe w kolumnach (oddzielone tabem)
  • ilość linii nieznana, ale w każdej linii jest taka sama liczba liczb zmiennoprzecinkowych

Program ma policzyć średnią arytmetyczną liczb dla każdej z kolumn i dopisać wynik na samym końcu pliku.

Napisałem program, tylko ciągle nie mogę zmusić go do działania. Męczę się nad tym dłuższy czas i ciągle nie mogę wyeliminować wszystkich błędów do końca. Ani wczytanie z nazwy.txt mi nie działa, ani wczytanie z konkretnego pliku, ciągle coś nie tak z pamięcią... Teraz nawet błędy wyskakują przy kompilacji (zaznaczone komentarzem w kodzie)... Czy można prosić o wskazówkę, co tutaj jest nie tak?

Oto kod: http://pastebin.com/apcauiFJ

Z góry wielkie dzięki za nakierowanie, co robię źle.

1

Nie musisz gromadzić nazwy plików.
Wczytałeś jedną nazwę - przekaż to do funkcji która obrobi plik o tej nazwie od początku do końca.

0

Dzięki za podpowiedź. Faktycznie, nie pomyślałem i niepotrzebnie skomplikowałem program.
Już mi praktycznie wszystko działa, tylko jeszcze ostatnie problem z dynamicznym alokowaniem pamięci dla stringa: Jak to naprawić?

Wykodziłem coś takiego, lecz nie wczytuje mi poprawnie nazwy - do plik1 jest wszystko ok., ale już rozszerzenia .txt nie wczytuje dalej + wywala błąd breakpointu...

		while (!feof(nazwy)) { // dopoki nie osiagnieto konca pliku...
		tab = malloc(sizeof(char));
		for (i = 0; temp != "\n"; i++) {
			tab = realloc(tab, sizeof(tab)+1); //blad: BREAKPOINT
			fscanf(nazwy, "%c", &temp); // wczytanie nazwy pliku do tablicy
				if (temp == "\n") {
					free(tab);
				}
				else {
					tab[i] = temp;
				}
				
		}
		przetworz(tab); //wykonanie funkcji
	}
	}
1

Poczytaj o MAX_PATH.
Wczytuj poprzez fgets pamiętaj aby usunąć '\n' na końcu.

0

Dzięki za posta. Przerobiłem kod na coś takiego, lecz nadal mam błąd w tej samej linijce - linijce alokowania pamięci... Przetwarza 1 plik i kończy błędem...

sciezka = malloc(sizeof(char));
	while (!feof(nazwy)) { // dopoki nie osiagnieto konca pliku...
		sciezka = realloc(sciezka, sizeof(sciezka)+1); //wywala na tej linijce - breakdown
		fgets(sciezka,MAX_PATH,nazwy); // wczytanie nazwy pliku do tablicy
		if (sciezka[strlen(sciezka) - 1] == '\n') {
			sciezka[strlen(sciezka) - 1] = '\0';
		}
		przetworz(sciezka); //wykonanie funkcji
	}
	free(sciezka);
1
char sciezka[MAX_PATH];
while(fgets(sciezka,MAX_PATH,nazwy))
  {
   char *ptr=strchr(sciezka,'\n');
   if(ptr) *ptr=0;
   przetworz(sciezka);
  }
0

Dzięki wielkie, wszystko śmiga aż miło.

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