Problem z kalkulatorem

0

Witam.
Mam problem z prostym kalkulatorem powinien działać następująco:
Wypisuje obecny wynik
Wprowadź liczbę
Wybierz działanie (jeżeli liczba różna od 0)
Wykonaj obliczenia (jeżeli liczba różna od 0)
Wróć do kroku 1.
Jeżeli wprowadzoną liczbą jest 0, zakończ program.

#include <iostream>
#include <conio.h>


void main ()
{
float fLiczba1;
float fLiczba2;

int nOpcja;

do
{
std::cout << "Podaj liczbe: ";
std::cin >> fLiczba1;

std::cout << "Podaj liczbe: ";
std::cin >> fLiczba2;

std::cout << "Wybierz dzialanie:" << std::endl;
std::cout << "1. Dodawanie" << std::endl;
std::cout << "2. Odejmowanie" << std::endl;
std::cout << "3. Mnozenie" << std::endl;
std::cout << "4. Dzielenie" << std::endl;
std::cout << "0. Wyjscie" << std::endl;
std::cout << "Twoj wybor: ";
std::cin >> nOpcja;


switch (nOpcja)
{
case 1:
	std::cout << fLiczba1 << " + " << fLiczba2 << " = "
<< fLiczba1 + fLiczba2<< std::endl; 
	break;
case 2: 
	std::cout << fLiczba1 << " - " << fLiczba2 << " = "
<< fLiczba1 - fLiczba2<< std::endl; 
	break;
case 3: 
	std::cout << fLiczba1 << " * " << fLiczba2 << " = "
<< fLiczba1 * fLiczba2<< std::endl; 
	break;
case 4:
if (fLiczba2 == 0.0)
std::cout << "Dzielnik nie moze byc zerem!"<< std::endl;
else
std::cout << fLiczba1 << " / " << fLiczba2 << " = "
<< fLiczba1 / fLiczba2<< std::endl;
break;

case 0: 
	std::cout << "Dziekujemy :)"<< std::endl;
	break;

default: 
	std::cout << "Nieznana opcja!" << std::endl;
}
}while (nOpcja <= 1 || nOpcja >=5 && nOpcja >= 1 || nOpcja <= 4);

getch();
}
0
#include <conio.h>
getch();

Aplikacji konsolowych nie powinno się zatrzymywać; mają wykonać co mają do wykonania i się wyłączyć, a każde normalne środowisko podtrzyma konsolę.

void main ()

main musi zwracać int.

No i nie jestem pewien cd.tego warunku:

(nOpcja <= 1 || nOpcja >=5 && nOpcja >= 1 || nOpcja <= 4)

Poza tym co jest nie tak?

0

A w którym miejscu tego programu masz oprogramowane: "Jeżeli wprowadzoną liczbą jest 0, zakończ program."

0

Właściwie mam problem z zakończeniem programu. Kiedy wpisuje 0 to nie kończy się tylko nadal wykonuje pętlę.

0

Zastanów się, jaka będzie kolejność wyrażeń w tym:
(nOpcja <= 1 || nOpcja >=5 && nOpcja >= 1 || nOpcja <= 4)
:)
Najlepiej w takich rozbudowanych warunkach stosować nawiasy, żeby jednoznacznie dla każdego było wiadomo, w jakiej kolejności co ma byc.

0

Ale jak to miało by to wyglądać

0

Skoro takie pytanie zadajesz to proponuje poczytac o priorytetach operatorów.

( ( ( nOpcja <= 1 ) || ( nOpcja >=5 ) ) && ( (nOpcja >= 1) || (nOpcja <= 4) ))

Jako zadanie domowe rozpisz sobie w powyższym punkt po punkcie, co będzie sprawdzane najpierw, a co później i jakie wyniki dadzą kiedy poszczególne operatory logiczne :)

0

Dzięki :)

0

Niestety nadal nie działa :(

0

Przy prostym warunku :
( nOpcja != 0) , u mnie działa bez zarzutu.

0

Bo nie podałem gotowca, tylko przykład użycia nawiasów :) Rozpisz sobie kolejność sprawdzania wyrażeń i ich wyniki, żeby wyczaić samemu :)

0

while (!(nOpcja == 0 || nOpcja > 4));

while (nOpcja);

niech ci będzie...

0

while (nOpcja);
Działa dzięki :)
Dyskusja zamknięta

0

Tak jak byś chciał wiedzieć problem był tu while

((nOpcja <= 1 || nOpcja >=5) && (nOpcja >= 1 || nOpcja <= 4));

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