Siemka – mam taki problem, w pierwszym kodzie poniżej napisałem dwie funkcje -dla liczby A, i dla liczby B . Dalej w funkcji main() , nastepnie w warunku wielokrotnego wyboru pomiedzy slowami kluczowymi jest petla do/while , w tej petli odczytalem dwie funkcje czyli ---
int podana1 = funkcja1();
Oraz
int podana2 = funkcja2();
--- problem mam dokladnie z warunkiem kończącym pętle do/while , otóż kiedy zapisze ją w taki sposób
while( podana1 != 0 || podana2 != 0 );
to zwróci mi bląd
Typu
\Lekcje C++\KALK-by-C18-funkcje\main.cpp||In function `int main()':|
Lekcje C++\KALK-by-C18-funkcje\main.cpp|99|error: `podana1' undeclared (first use this function)|
Lekcje C++\KALK-by-C18-funkcje\main.cpp|99|error: (Each undeclared identifier is reported only once for each function it appears in.)|
Lekcje C++\KALK-by-C18-funkcje\main.cpp|99|error: `podana2' undeclared (first use this function)|
Oto fragment:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int funkcja1()
{
bool sprawdz1;
int liczba;
cin >> liczba;
sprawdz1 = cin.good();
cin.clear();
cin.sync();
if( sprawdz1 == false )
do
{
cout << "\n Liczbe A, nie literke: ";
cin >> liczba;
sprawdz1 = cin.good();
cin.clear();
cin.sync();
} while( !sprawdz1 );
return liczba;
}
int funkcja2()
{
bool sprawdz2;
int liczba2;
cin >> liczba2;
sprawdz2 = cin.good();
cin.clear();
cin.sync();
if( sprawdz2 == false )
do
{
cout << "\n Ponownie B: ";
cin >> liczba2;
sprawdz2 = cin.good();
cin.clear();
cin.sync();
} while( !sprawdz2 );
return liczba2;
}
int main()
{
bool sprawdz4;
int menu;
do
{
system( "color F0" );
cout << "\n\n\n\n\t\t\t *** KALKULATOR by CAPAJERA_18 *** \n\n" << endl;
cout << "\t\t#------------------------------------------------#" << endl;
cout << "\t\t| 1 - Dodawanie |" << endl;
cout << "\t\t| 0 - Wyjscie z programu |" << endl;
cout << "\t\t#------------------------------------------------# " << endl;
cout << "\n\n WYBIERZ OPCJE I NACISNIJ ENTER -> ";
cin >> menu;
sprawdz4 = cin.good();
cin.clear();
cin.sync();
if( sprawdz4 == false )
do
{
cout << " Podaj opcje, nie litere -> ";
cin >> menu;
sprawdz4 = cin.good();
cin.clear();
cin.sync();
} while( !sprawdz4 );
switch( menu )
{
case 1:
cout << "\n\n -> Jako A i B podaj 0 by zakonczyc dodawanie <- \n\n" << endl;
do
{
int wynik;
cout << " podaj liczbe A ";
int podana1 = funkcja1();
cout << "\n podaj liczbe B ";
int podana2 = funkcja2();
wynik = podana1 + podana2;
cout << podana1 << " + " << podana2 << " = " << wynik << endl;
} while( podana1 != 0 || podana2 != 0 );
cout << " *** EXIT *** " << endl;
break;
case 0:
cout << " EXIT PROGRAM, GOOD BYE :-) " << endl;
getch();
return 0;
break;
default:
cout << " \n\n\n\n\n\n\n\n\n\n\n" << endl;
cout << "\t\t\t Brak opcji " << menu << endl;
break;
}
} while( 1 );
getch();
return 0;
}
Nom to pół przedstawionego problemu – dalej kiedy zmienię warunek kończący pętle
Na:
while( funkcja1 != 0 || funkcja2 != 0 );
^^^ to wtedy po kompilacji i uruchomieniu programu Wybraniu opcji dodawania , wpisując ZERO, nie chce mi się to zakończyć
Lecz kiedy napisze w taki sposób dodatkowo z nawiasami
while( funkcja1() != 0 || funkcja2() != 0 );
Wtedy czeka dodatkowo na 3 liczby, to wynik programu po dopisaniu ostatniego warunku jaki tu przedstawiłem:
WYBIERZ OPCJE I NACISNIJ ENTER -> 1
->Jako …….. <-
Podaj liczbe A: 2
Podaj liczbe B: 2
2 + 2 = 4
… <<<- i tu Mi czeka na dodatkowy znak
Podaj liczbe A: 5
Podaj liczbe B: 1
5 + 1 = 6
…. << - i znowu
I coż nie mogę sobie z tym poradzić by czytało mi liczbe ZERO , jako opcje wyjścia z dodawania.
Czy mógłby mi ktoś pomóc ??
Wytłumaczyć co to za błąd, poradzić itd ?
Bardzo bardzo prosze ...