Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - odczytywanie liczb double ze stringa

20 Lut 2015 17:13 990 5
  • Poziom 22  
    Bardzo proszę o pomoc, bo powoli zaczynam uczyć się programowania w C++ i nie wiem jaki popełniam błąd, że wyskakuje naruszenie ochrony pamięci. Chcę zbudować kalkulator, w którym wpisuję całe działanie i odczytuję potem z takiej linii tekstu liczby i działania.
    Na początek działaniami mogą być tylko dodawanie, odejmowanie, mnożenie i dzielenie.
    Pracuję na Ubuntu i g++ i nie działają mi ani biblioteka boost (coś tam działa, ale są problemy) ani funkcja std::stod (absolutnie odmawia współpracy).

    Dlatego wykorzystuję funkcję z C strtok.

    Na razie chodzi tylko o odczytanie liczb i ich konwersję do double. Gdzieś w pętli ze strtok jest błąd, który generuje komunikaty o błędzie. Ale nie umiem znaleźć tego błędu.

    Drugie pytanie to czy ktoś miałby pomysł jak to zadanie zrobić prościej. Getline o ile wiem potrafi odcinać słowa ale dla jednego znaku jako oddzielacza słów. Może to ominąć ale przy kalkulatorze gdzie będzie dużo działań wydaje mi się to niewłaściwym kierunkiem.

    W każdym razie wiem, że używanie char * w c++ jest źle widziane, ale póki co wszelkie inne metody znalezione w internecie nie współpracują z kolei z g++.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Co chcę zrobić dalej.
    Kiedy już program będzie poprawnie wczytywał liczby do tablicy (po skonwertowaniu ich do double), napiszę podprogram który za pomocą pętli wydobędzie kolejne znaki działań ze stringa i zapisze je w jakiejś drugiej tablicy. Będzie zatem tablica liczb i tablica działań.
    Nie za bardzo niestety jeszcze umiem wymyśleć jak to potem połączyć, aby zachować kolejność działań (a+b * c powinno się wykonywać b*c i dopiero potem a+b*c).
    Pomoc lub podpowiedź w tym zakresie też mile widziana.
  • Poziom 32  
    Kod: cpp
    Zaloguj się, aby zobaczyć kod
  • Poziom 28  
    jowyma napisał:
    Pracuję na Ubuntu i g++ i nie działają mi ani biblioteka boost (coś tam działa, ale są problemy) ani funkcja std::stod (absolutnie odmawia współpracy).

    Co to za problemy?

    jowyma napisał:

    Nie za bardzo niestety jeszcze umiem wymyśleć jak to potem połączyć, aby zachować kolejność działań (a+b * c powinno się wykonywać b*c i dopiero potem a+b*c).

    http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska
  • Poziom 22  
    Dziękuję Witold za podpowiedź, wreszcie kod działa.

    Co do problemów z biblioteką boost to nie umiem sobie poradzić z przechwytywaniem błędu. Oto komunikat, jaki otrzymuję:

    Cytat:
    kalkulator1.cpp: In function ‘int main()’:
    kalkulator1.cpp:31:5: error: expected primary-expression before ‘catch’
    catch(boost::bad_lexical_cast const&)
    ^
    kalkulator1.cpp:31:5: error: expected ‘;’ before ‘catch’


    Kod: cpp
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 28  
    Kod: cpp
    Zaloguj się, aby zobaczyć kod