Wczytywanie danych z pliku do struktury - różne typy danych
Ostatnio zmodyfikowano 2019-10-14 16:59
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: struct przedmiot { 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: 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 |
|
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ć. |
|
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ć? |
|
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. |
|
« 1 » |