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, botów: 0