Problem z pętlą główną w prostym kalkulatorze.

0

Witam. Mam problem z programem na zajęcia. Ma to być prosty kalkulator wczytujący działanie w formie 2+1.
Problem mam w funkcji main, w pętli która ma się zapętlać aż do wprowadzenia kropki. Nie ogarniam jak ta pętla ma wygladać. Może ktoś mi z nią pomóc? Może jakiś szkic?

int WczytajDzialanie(int* wArg1, char* wOper, int* wArg2){

if (WczytajLiczbe(wArg1,)==-1) return -1;

    cin >> *wOper;

if (WczytajLiczbe(wArg2,)==-1) return -1;

return 0;

}


int WczytajLiczbe(int* wLiczba){
cin >> Liczba;
    if (cin.fail()) 
	{
      	cout << "*** Liczba zostala blednie wprowadzona."<< endl << endl;
        cin.clear();            // Reset znacznikow bledu
     	cin.ignore(10000,'\n'); // Ignorowanie wszystkich znakow,
                                // az do konca linii
      	return -1;
    	}

int main()
{
 ZnakKonca = 'a';
while (ZnakKonca != '.') 
 {
	WczytajDzialanie(&Arg1,&Oper,&Arg2);




}
}
0
cin >> Liczba

nie wczytuje wszystkiego przypadkiem do naciśnięcia enter? W takim przypadku zawsze próbuje wszystko w czytać do pierwszego argumentu i na moje oko się wyłoży. Będziesz musiał raczej samodzielnie parsować linię i dzielić na na argumenty i operator. Wówczas rozpoznanie pojawienia się kropki łatwo będzie obsłużyć zwracając np. 1 w funkcji WczytajDzialanie().
Do parsowania linii chyba się nada cin.getline()

0
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>

using namespace std;

bool WczytajDzialanie(int* wArg1, char* wOper, int* wArg2)
{
	string linia;
	getline(cin, linia); // pobieramy cała linię z wejscia

	return
		// konwertujemy na liczbe-znak-liczbe i sprawdzamy,  czy udało się skonwertować wszystkie trzy
		(sscanf(linia.c_str(), "%d%c%d", wArg1, wOper, wArg2) == 3) && 
		// sprawdzamy, czy wczytany znak to prawidlowy operator dzialania
		(strchr("+-*/", *wOper) != NULL);
}
 
int main()
{
	int Arg1, Arg2;
	char Oper;

	while (cin.peek() != '.') 
	{
		if (!WczytajDzialanie(&Arg1,&Oper,&Arg2)) {
			cout << "Bledne dzialanie!" << endl;
		} else {
			cout << "Dzialanie OK!" << endl;
		}
	}
}

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