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

Odczyt danych ze stringa (string subscript out of range)

Object Storage Arubacloud
0 głosów
133 wizyt
pytanie zadane 6 kwietnia 2021 w C i C++ przez 0Brzoza0 Nowicjusz (120 p.)
otagowane ponownie 6 kwietnia 2021 przez 0Brzoza0
Witam
Piszę tutaj bo już skończyły mi się pomysły jak rozwiązać mój problem. Chodzi dokładnie o pętlę od linijki 60 do 108. Nie rozumiem dlaczego wyskakuje błąd jak w opisie (string subscript out of range) przy próbie odczytywania po kolei znaków zawartych w stringu. Visual Studio nie pokazuje mi żadnych błędów.
Zamieszczam link do pastebin-a:

https://pastebin.com/NdVH5duS

Dane wprowadzane do pliku np:
2
Adam
7000
Ewa
15000
-+

PS: Dane w pliku mają wyglądać jak powyżej czyli enter między nimi, i jakby ktoś dał radę wytłumaczyć mi czemu linijka 49 działa to byłbym wdzięczny.
Aha i jeśli by się ktoś zastanawiał dlaczego to wszystko jest tak pokręcone to dlatego że próbuję zrealizować zadanie z podręcznika wg polecenia. I ogólnie zatrzymałem się na przypisaniu do struktury danych z pliku.
komentarz 7 kwietnia 2021 przez j23 Mędrzec (194,920 p.)

A dlaczego nie tak:

int n;
wplacajacy w;
std::vector<wplacajacy> osoby;

if(std::cin >> n) {
    while (n-- && std::getline(std::cin >> std::ws, w.nazwisko) >> w.kwota) {
        osoby.push_back(w);
    }
}

???

P.S. inFile jest IMO zbędny.

1 odpowiedź

0 głosów
odpowiedź 7 kwietnia 2021 przez TOM_CPP Pasjonat (22,640 p.)

Przydałaby się tutaj serializacja.

#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>

using namespace std;

struct Person
{
    string name {};
    int price {};

    friend istream& operator>>( istream &is , Person& person )
    {
        return is >> person.name >> person.price;
    }

    friend ostream& operator<<( ostream &out , const Person& person )
    {
        out << person.name << endl <<  person.price << endl;
        return out;
    }
};

int main()
{
    ofstream{"example.txt"} << Person{"John",200} << Person{"Bill",500};

    ifstream read {"example.txt"};
    vector<Person> persons { istream_iterator<Person>{read} , {} };

    for( const auto& person : persons ) cout << person;
}

 

Podobne pytania

+1 głos
1 odpowiedź 285 wizyt
0 głosów
1 odpowiedź 902 wizyt
pytanie zadane 6 czerwca 2019 w Python przez Ventre90 Obywatel (1,170 p.)
0 głosów
1 odpowiedź 1,162 wizyt
pytanie zadane 6 listopada 2018 w C i C++ przez applepie Początkujący (250 p.)

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...