Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wczytywanie danych z pliku do struktury - różne typy danych

Ostatnio zmodyfikowano 2019-10-14 16:59
Autor Wiadomość
kosu02
Temat założony przez niniejszego użytkownika
Wczytywanie danych z pliku do struktury - różne typy danych
» 2019-10-13 19:01:10
Witam.
Tworzę program konsolowy (niedawno zacząłem programować) - losowanie przedmiotów. Chcę aby przedmioty przy starcie programu zostały wczytane z pliku. Napisałem do tego strukturę oraz funkcję wczytując. Struktura wygląda tak:

C/C++
struct przedmiot //Struktura przedmiotu
{
    int nr_przedmiotu;
    string nazwa_przedmiotu;
    int liczba_losujaca;
    int wartosc;
};

przedmiot przedmioty[ 40 ];


A tutaj kawałek funkcji wczytującej mający za zadanie wczytać dane:
C/C++
for( int i = 0; i < 40; i++ )
{
    plik >> przedmioty[ i ].nr_przedmiotu;
    plik >> przedmioty[ i ].nazwa_przedmiotu;
    plik >> przedmioty[ i ].liczba_losujaca;
    plik >> przedmioty[ i ].wartosc;
   
   
}

Pierwsza liczba (numer przedmiotu) zostaje wczytana normalnie, lecz następnie do zmiennej typu string wczytuje się tylko jedno słowo, co sprawia duży problem jeśli przedmiot ma dwa słowa w nazwie. Następnie zmienna liczba_losujaca oraz wartosc zawsze są wczytywane jako 0 niezależnie od swojej wartości w pliku.



Ostrzeżenie C26495 Zmienna „przedmiot::wartosc” jest niezainicjowana. Zawsze inicjuj zmienną składową (type.6).
Ostrzeżenie C26495 Zmienna „przedmiot::liczba_losujaca” jest niezainicjowana. Zawsze inicjuj zmienną składową (type.6).
Ostrzeżenie C26495 Zmienna „przedmiot::nr_przedmiotu” jest niezainicjowana. Zawsze inicjuj zmienną składową (type.6).

Tak wygląda log. Jako, że jestem początkujący rozumiem tych komunikatów a artykuły na stronie microsoftu (programuje w visual studio) mi nie pomagają. Chciałbym żeby te dane zostały wczytane normalnie, ponieważ potrzebuję ich do rozszeżenia funkcjonalności programu.
Z góry dziękuje za pomoc



P-175363
pekfos
» 2019-10-13 20:43:28
W formacie pliku jaki przyjąłeś, białe znaki rozdzielają wartości w pliku, więc żadna wartość nie może ich zawierać.
P-175364
kosu02
Temat założony przez niniejszego użytkownika
Format pliku
» 2019-10-14 14:50:52
Dziękuje za odpowiedź, w jakim formacie musiałbym zapisywać dane by nazwy mogłyby być 2 częściowe?. Do tego ewentualne zmiany w kodzie, nie oczekuję napisania programu za mnie, chciałbym zostać tylko nakierowany, żebym wiedział czego mam szukać. Jeszcze odnośnie logów mojego programu. Program działa poprawnie ale ostrzeżenia dalej występują. Mogę je zignorować?
P-175366
pekfos
» 2019-10-14 16:59:50
Dziękuje za odpowiedź, w jakim formacie musiałbym zapisywać dane by nazwy mogłyby być 2 częściowe?
Rozdzielaj wartości czymś innym. Bo ja wiem, średnikami. Zakładam, że chcesz mieć plik tekstowy z tym.
1;2;Ala ma kota;4
Jest parę sposobów na zaimplementowanie tego. Najprostszy to wczytywanie liczb przez >>, tak jak masz teraz, tylko musisz jakoś zignorować te średniki. Najlepiej wczytując je jako znaki i sprawdzając czy aby na pewno to są średniki. Napisy wczytuj przez std::getline(), wyszukaj sobie co robi trzeci argument tej funkcji.

Program działa poprawnie ale ostrzeżenia dalej występują. Mogę je zignorować?
Są niezwiązane z tematem i przedstawionym kodem.
P-175367
« 1 »
  Strona 1 z 1