Problem z kalkulatorem z i do pliku.

0

Witam. Natknąłem się na problem i nie wiem co jest nie tak. Program wywala : Program nie obsługuje takich dzialan." Ktoś pomoże?

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main()
{
    int liczba1, liczba2, a, b;
    int wynik=0;
    string dzialanie1, dzialanie2;

    cout<<"Podaj 1-sza liczbe do dzialania"<<endl;
    cin>>liczba1;
    cout<<"Podaj 2-ga liczbe do dzialania"<<endl;
    cin>>liczba2;
    cout<<"Podaj dzialanie (+,-,/,*)"<<endl;
    cin>>dzialanie1;
    fstream plik;

    plik.open("dzialanie.txt", ios::out);

    plik<<liczba1;
    plik<<dzialanie1;
    plik<<liczba2;

    plik.close();

    plik.open("dzialanie.txt", ios::in);

       plik>>a;
       plik>>dzialanie2;
       plik>>b;

    plik.close();

    cout<<a<<dzialanie2<<b<<endl;


    if (dzialanie2 == "+")
    {
        wynik = a + b;
    }
    else if (dzialanie2 == "-")
    {
        wynik = a - b;
    }
    else if (dzialanie2 == "/")
    {
        wynik = a / b;
    }
    else if (dzialanie2 == "*")
    {
        wynik = a * b;
    }
    else
    {
        cout << "Program nie obsluguje takich dzialan!";
        return 0;
    }




    plik.open("wynik.txt", ios::out);

    plik << "Wynik to: ";
    plik << wynik;

    plik.close();

    cout << "Wynik zapisany zostal w pliku wynik.txt " << endl;

    return 0;
}


1

Jeśli program nie działa zgodnie z oczekiwaniami, użyj debuggera lub innych technik debugowania.

Obstawiam, że dane zapisywane są bez przerw, więc do zmiennej operacja2 zapisany jest pozostały tekst, do końca linii. Wstaw spacje do pliku, albo napisz parser do przetwarzania takich łańcuchów.

A to na wypadek, gdyby użycie debuggera było niemożliwe.
Podręczne sposoby debugowania

0

Wczytujesz najpierw dwie liczby, a potem znak działania. Tyle, że po wczytaniu drugiej liczby w buforze został znak końca linii, i to on jest odczytywany jako działanie. Podejrzyj, co masz zapisane w tym pliku jakie działanie, i czy to co odczytujesz z wiersza poleceń / pliku, jest tym co oczekujesz ;-)

1

Operator >> pomija białe znaki i oczekuje na wprowadzenie danych.
Sytuacja z pomijaniem pobierania z powodu \n jest przy korzystaniu z funkcji std::getline().
https://ideone.com/xqM66v

0

Właśnie zapis do pliku jest prawidłowy, ale odczyt już nie. Wcześniej napisałem program który pobiera liczby i działanie z pliku, a nie przez wprowadzenie użytkownika i działało. Nie mogę zajść w głowę co jest nie tak.

0

Chcesz pobrać z pliku liczbę, tekst i liczbę.
Jeśli nie są oddzione spacją, pobierasz liczbę.
Później pobierasz tekst, a liczba to też tekst, więc do zmiennej operacja trafia np. "+123", czyli wszystko do jakiegokolwiek białego znaku.

Edit:
Jest jeszcze inna możliwość. Jeśli operacje będą jedynym znakiem, zamień string na char i powinno zadziałać.

0

Dzięki wielkie, wrócę do domu i będę kombinować

1 użytkowników online, w tym zalogowanych: 0, gości: 1