• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista zawodnikow. Problem z odczytywaniem informacji z pliku. C++

VPS Starter Arubacloud
0 głosów
316 wizyt
pytanie zadane 19 stycznia 2018 w C i C++ przez Agrael Nowicjusz (160 p.)
edycja 19 stycznia 2018 przez Agrael

Witam ! Jest to mój pierwszy post i mam nadzieję, że nie zdenerwuję Was banalnością zagadnienia. Piszę program, taka mała bazę danych zawodników. Podaje Imię, nazwisko, wagę zawodnika oraz jego rekord. Wiem jak zapisać dane zawodnika do pliku. Wyświetlają się one kolejna tak jak podałem wyżej. Problem pojawia się gdy chce wykorzystać te dane i wczytać je z powrotem. Gdy chce wczytać dane z pliku to program wypisuję mi wszystkie wpisane informacje, a ja chciałbym wyświetlić dane konkretnego zawodnika. Nie wiem jak do tego się zabrać. Nie proszę was o gotowy kod, raczej o nakierowanie mnie jak mam ten problem rozwiązać. Na chwile obecną mam takie coś. Dzięki za poświęcony czas. Pozdrawiam ! 

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

string imie, nazwisko;
int waga, rekord;

    void dopisywanie()
    {
    cout << "Podaj imie: ";     	cin>>imie;
    cout << "Podaj nazwisko:  ";	cin>>nazwisko;
    cout << "Podaj wage zawodnika:  ";  cin>>waga;
    cout << "Podaj rekord: ";		cin>>rekord;

    fstream plik;
    plik.open("Lista zawodnikow.txt",ios::out | ios::app);
    plik<<imie<<endl;
    plik<<nazwisko<<endl;
    plik<<waga<<endl;
    plik<<rekord<<endl;
    plik.close();
    }

    
int main()
{
    //dopisywanie();
    fstream plik;
    plik.open("Lista zawodnikow.txt");
    string linia;
    do
    {
        for(int i=0;i<4;i++)
        {
        getline(plik,linia);
        cout <<linia<<endl;
        }
        cout <<"*************"<<endl;
    }
    while(linia!="");
    plik.close();    

return(0);

}

Dobra już wiem jak sobie poradzę. Napisałem krótki kod ( z pomocą internetu xD )który pozwala mi tworzyć plik o nazwie wpisanej przez użytkownika. Każdy zawodnik to będzie osobny plik. Jak ktoś potrafiłby mi pomóc i podać lepsze rozwiązanie to proszę. Będę wdzięczny :) 

string NazwaPliku2;
    cin>>NazwaPliku2;
    NazwaPliku2 += ".txt";
    ofstream plikDoZapisu;
    plikDoZapisu.open( NazwaPliku2.c_str(), ios::out | ios::app );

 

 

 

4 odpowiedzi

0 głosów
odpowiedź 19 stycznia 2018 przez 10kw10 Pasjonat (22,880 p.)
Dosc duzo bd tych plikow. Moze lepiej jakbyś mial zawodnikow w jednej linii, czyli dopiero po ostatniej danej dal endl, a takto spacje, wczytal imie i nazwisko (plik>>imie;), porownal z szukanymi wartosciami i zdecydowal czy pobieram cala linie czy szukam dalej.
0 głosów
odpowiedź 19 stycznia 2018 przez CenterPL Pasjonat (19,070 p.)
To ja podpowiem - zapisz sobie każdą linię do np tablicy. Myślę, że jak zapiszesz do tablicy to z wyszukaniem nie będziesz miał problemów.

Lepszym rozwiązaniem, ale może zbyt zaawansowanym, będzie skorzystanie np z mapy. Nie piszę w c++, ale chyba coś takiego jest.
0 głosów
odpowiedź 19 stycznia 2018 przez Beginer Pasjonat (22,110 p.)
Osobne pliki dla każdego zawodnika to jest złe rozwiązanie (niepraktyczne, nie eleganckie). Może na początku każdej pozycji z listy (jeszcze przed parametrami zawodnika) zapisuj numer pozycji (jednocześnie numer zawodnika). Wtedy przy odczycie listy będziesz mógł łatwo wyselekcjonować żądaną pozycję (np. prostym zapytaniem if - czy to jest ten numer?)
0 głosów
odpowiedź 19 stycznia 2018 przez Agrael Nowicjusz (160 p.)
Dzięki za poświęcenie mi czasu. Już odpowiadam. Tablice odpadają, bo nie wiem ile zawodników dodam, a wielkość tablicy trzeba zadeklarować. Zrobiłbym to za pomocą struct i vector ale nie mam tego używać.

Co do wyselekcjonowania z listy, to powiedz mi jak to miałboby wyglądać ?
komentarz 19 stycznia 2018 przez Beginer Pasjonat (22,110 p.)
Zacznijmy od tego, że powinieneś każdą pozycję listy (wszystkie parametry danego zawodnika, poczynając od jego numeru) zapisywać w jednej linii. Wtedy będzie wyglądać naturalnie, elegancko i przejrzyście - jak prawdziwa lista. Kolejne dane w linii wystarczy oddzielać jedną spacją (może być więcej).

Spróbuj to wykonać, później zajmiemy się odczytem.

Podobne pytania

0 głosów
1 odpowiedź 83 wizyt
pytanie zadane 13 marca 2020 w JavaScript przez quoka Nowicjusz (230 p.)
+1 głos
2 odpowiedzi 8,224 wizyt
0 głosów
2 odpowiedzi 168 wizyt
pytanie zadane 13 sierpnia 2023 w C i C++ przez Janchess Początkujący (480 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...