wczytywanie pliku

0

Czołem. Szukałem w internecie, ale nie znalazłem odpowiedzi na dwa problemy w C, z którymi nie potrafię sobie poradzić:

  1. jak mogę otworzyć plik o nazwie, którą podaję dopiero podczas wykonywania programu?
  2. w jaki sposób mogę do tablicy struktur (imię, nazwisko, data - są w jednej linii) wczytać z pliku po wyrazie (jest tylko jak po znaku lub linijce)?
    Z góry dziękuję za wszelką pomoc
    Pozdrawiam

EDIT:

  printf("Podaj nazwe pliku do odczytu:\n");
  scanf("%s", &nazwaPliku);
  FILE *pliko = fopen(nazwaPliku, "r");

tak zrobiłem 1., ale nie wiem czy działa, ponieważ nie mam pojęcia jak rozwiązać drugi problem, tu nic mi do głowy nie przychodzi.

2
  char fileName[256+1];
  printf("Podaj nazwe pliku do odczytu: ");
  scanf("%256s",fileName);
  FILE *fr=fopen(fileName,"r");
0
	while (fscanf(fr, "%d %s %s %s", &pom, osoba[i].imie, osoba[i].nazwisko, osoba[i].rok) != EOF) {
		printf("%s %s %s\n", osoba[i].imie, osoba[i].nazwisko, osoba[i].rok);
		i++;
	}

spróbowałem tak to zrobić, ale niestety program się crashuje... plik wejściowy zawiera 4 dane w linii, stąd to tak próbowałem zrobić

0

Jedno z trzech:

  • nie zainicjalizowałeś i
  • nie przydzieliłeś pamięć pod osoba
  • zadeklarowałeś imie (oraz nazwisko oraz rok) jako char *
0
#include <stdio.h>
#include <stdlib.h>

#define MAX 50

struct dane {

	char imie[20];
	char nazwisko[20];
	char rok[4];
};

int main(void) {
	int pom, i = 0;
	struct dane osoba[MAX];
	FILE *fr;

	char fileName[256 + 1];
	printf("Podaj nazwe pliku do odczytu: ");
	scanf("%256s", fileName);
	fr = fopen(fileName, "r");
	if (fr == NULL) {
		printf("Nie mogę otworzyć pliku test.txt do odczytu!\n");
		exit(1);
	}
	system("cls");
	while (fscanf(fr, "%d %s %s %s", &pom, osoba[i].imie, osoba[i].nazwisko, osoba[i].rok) != EOF) {
		printf("%s %s %s\n", osoba[i].imie, osoba[i].nazwisko, osoba[i].rok);
		i++;
	}
	fclose(fr);
	system("PAUSE");
	return 0;
}

tak wygląda cały kod,
i zainicjowałem z wartością początkową 0, osoba jest zadeklarowana tak: struct dane osoba[MAX];, a te zmienne zadeklarowałem jako char imie[20]

0

Program powinien działać, skoro nie działa to jedno z trzech:

  • Masz nieodpowiedni format pliku
  • Nie wiesz która ścieżka jest bieżącą więc program nie widzi tego pliku
  • Masz włączoną opcje dla niepełnosprawnych komputerowo: - Ukryj rozszerzenia znanych typów - więc nie wiesz nawet jak plik się nazywa.
0

67a36e56b1.png
takie znaki lecą przez jakiś czas w dół, a później tylko
2218ea3c7d.png

format pliku mam .txt, wpisuję całą nazwę test.txt, a plik na pewno jest w katalogu bieżącym (dla pewności skopiowałem do innych folderów w projekcie, rezultat ten sam)

1

Aha WC, zamień: != EOF na ==4
Nie pokazałeś zawartości pliku.

0

plik ma zawartosc: [liczba] [imie] [nazwisko] [rok] i tak 25 linijek.
zamieniłem na == 4, jest postęp, ale wyświetla tylko pierwsze osiem pozycji

EDIT: ok, w pliku źródłowym jest błąd, w 8 linijce nie ma daty. w takim razie wszystko powinno być ok, dziękuję! :)

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