Zła kolejność wczytywania funkcji.
Ostatnio zmodyfikowano 2015-07-17 21:07
bulbulator Temat założony przez niniejszego użytkownika |
Zła kolejność wczytywania funkcji. » 2015-07-17 12:27:05 Cześć, mam problem z jednym z punktów z zadania pod lekcją o funkcjach. Podczas wpisywania liczb poszczególne funkcje wczytują się w odwrotnej kolejności a ja nie mam pojęcia dlaczego. Muszę wkleić cały kod bo nie wiem gdzie jest błąd. #include <iostream> #include <limits> #include <cstdlib> #include <ctime> using namespace std;
void menu() { cout << "\n MENU \n [1] dodawanie \n [2] odejmowanie \n [3] mnozenie \n [4] dzielenie \n [5] koniec \n"; }
int wczytaj_a() { int a; bool sukces; int sprawdz = 0; do { cout << "Podaj numer funkcji: "; cin >> a; bool sukces = cin.good(); if( sukces == 1 ) { sprawdz = 1; } else { cout << "zle, wpisz jeszcze raz" << endl; cin.clear(); cin.sync(); } } while( sprawdz != 1 ); return a; }
int wczytaj_x() { int x; bool sukces; int sprawdz = 0; do { cout << "Podaj liczbe x: "; cin >> x; bool sukces = cin.good(); if( sukces == 1 ) { sprawdz = 1; } else { cout << "zle, wpisz jeszcze raz" << endl; cin.clear(); cin.sync(); } } while( sprawdz != 1 ); return x; } int wczytaj_y() { int y; bool sukces; int sprawdz = 0; do { cout << "Podaj liczbe y: "; cin >> y; bool sukces = cin.good(); if( sukces == 1 ) { sprawdz = 1; } else { cout << "zle, wpisz jeszcze raz" << endl; cin.clear(); cin.sync(); } } while( sprawdz != 1 ); return y; } int dzialania( int liczba, int x, int y ) { switch( liczba ) { case 1: cout << x << "+" << y << "=" << x + y << endl; break; case 2: cout << x << "-" << y << "=" << x - y << endl; break; case 3: cout << x << "*" << y << "=" << x * y << endl; break; case 4: cout << x << "/" << y << "=" << x / y << endl; break; case 5: exit( 5 ); break; } return 0; }
int main() { int a = 5; do { menu(); int wczytaj_a(); int wczytaj_x(); int wczytaj_y(); dzialania( wczytaj_a(), wczytaj_x(), wczytaj_y() ); } while( a != 10 ); return 0; }
Ktoś coś zauważył? Pomóżcie, nowy jestem :D |
|
Monika90 |
» 2015-07-17 13:00:34 Kolejność obliczania wartości argumentów funkcji jest w C++ nieokreślona. Jeżeli zależy Ci na konkretnej kolejności, to wywołaj te funkcje przed funkcją dzialania, ich wyniki zapisz do zmiennych i przekaż do funkcji dzialania te zmienne. |
|
JMII89 |
» 2015-07-17 16:22:08 Bo nie przypisujesz żadnym zmiennym tych wartości z funkcji . Czyli te funkcje tak jakby nic nie zwracają. |
|
bulbulator Temat założony przez niniejszego użytkownika |
» 2015-07-17 20:14:50 Zrobiłem to tak, i teraz mam w nieskończoność pokazywaną funkcje z menu, int main() { int o = 2; do { menu(); int a; int wczytaj_a( a ); int x; int wczytaj_x( x ); int y; int wczytaj_y( y ); dzialania( a, x, y ); } while( o != 4 ); return 0; }
chyba coś źle zrobiłem edit: na pewno coś źle zrobiłem :) |
|
BadBullPL |
» 2015-07-17 20:38:16 Tak to powinno wyglądać: int main() { int a = 5; do { menu(); int a = wczytaj_a(); int x = wczytaj_x(); int y = wczytaj_y(); dzialania( a, x, y ); } while( a != 10 ); return 0; } |
|
bulbulator Temat założony przez niniejszego użytkownika |
» 2015-07-17 21:07:21 dziękuje bardzo za pomoc, problem rozwiązany :) |
|
« 1 » |