cccp Temat założony przez niniejszego użytkownika |
Błedne działanie programu » 2011-05-08 10:49:08 Witam wszystkich na forum. Napisałem prosty kalkulator, jednak niekiedy jego działanie konczy się błędem. Program się wyłącza, a czasem działa normalnie. Dodawanie "break;" na koncu nic nie dało rezultatu. Co można by było w nim poprawić? Oto kod programu #include <iostream> int main() { double a, b; int liczba; std::cout << "1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; switch( liczba ) { case 1: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a + b << std::endl; if( liczba ) { std::cout << "\n1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; } case 2: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a - b << std::endl; if( liczba ) { std::cout << "\n1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; } case 3: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a * b << std::endl; if( liczba ) { std::cout << "\n1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; } case 4: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a / b << std::endl; if( liczba ) { std::cout << "\n1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; } default: std::cout << "ani jeden, ani dwa, ani trzy, ani cztery, ani zero" << std::endl; case 0: std::cout << "Koniec programu. Bye bye!" << std::endl; } return 0; } |
|
Dawidsoni |
» 2011-05-08 10:55:10 Kod umieszczaj w [ cpp ] [/cpp]. Co do programu to chyba powinno być char liczba, a przy case powinno być '1','2'... |
|
cccp Temat założony przez niniejszego użytkownika |
» 2011-05-08 11:04:24 Gdy zmienię przy case na '1', '2' od razu program się wysypuje. |
|
SeaMonster131 |
» 2011-05-08 11:16:25 Poprawnie tak powinno być: case 1:
break;
case 2:
break; Oraz mógłbyś to dać w pętle zamiast pisać if( liczba ) { } |
|
cccp Temat założony przez niniejszego użytkownika |
» 2011-05-08 11:25:59 Ale tak jak napisałem w pierwszym poscie, gdy dodam do każdego na koncu "break;" jeszcze częściej mi się program wyłącza. Spróbuję w jednej if umieścic ten tekst. Tylko że nie wiem jak dodać go do jednego if i tych wszystkich case. Aby po każdym działaniu wypisywał std::cout << "\n1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; By tego nie wypisywać osobno pod każdym case. |
|
SeaMonster131 |
» 2011-05-08 12:03:14 Spróbuję w jednej pętli if umieścic to wypisywanie. |
if() to nie pętla :) Chodziło mi bardziej o pętle np while, do while itd.. np: #include <iostream> #include <stdlib.h> #include <conio.h> int main() { double a, b; int liczba; do { system( "cls" ); std::cout << "1 - dodawanie 2 - odejmowanie 3 - mnozenie 4 - dzielenie 0 - koniec\n"; std::cout << "\nWybierz dzialanie:"; std::cin >> liczba; switch( liczba ) { case 0: break; case 1: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a + b << std::endl; getch(); break; case 2: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a - b << std::endl; getch(); break; case 3: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a * b << std::endl; getch(); break; case 4: std::cout << "\nPodaj dwie liczby: \n"; std::cin >> a >> b; std::cout << "wynik= " << a / b << std::endl; getch(); break; default: std::cout << "ani jeden, ani dwa, ani trzy, ani cztery, ani zero" << std::endl; getch(); } } while( liczba != 0 ); std::cout << "Koniec programu. Bye bye!" << std::endl; return 0; } |
|
cccp Temat założony przez niniejszego użytkownika |
» 2011-05-08 12:40:20 Dzięki, teraz działa. Dopiero skonczyłem poziom1, dlatego nie wiedziałem o tej pętli "do while"
To jeszcze zapytam czy lepiej pisac przestrzenie nazw z przedrostkiem std::. Czy dodać "using namespace std;" i pisać bez tego przedrostka, gdyż jest to obecny standard w języku C++. Jak obecnie piszecie? Mam też pytanie czy opłaca się jeszcze używać funkcji printf, przy użyciu tenchniki strumienia std w języku C++? |
|
szyx_yankez |
» 2011-05-08 13:07:13 Bezpieczniej pisać z przedrostkiem std:: .
Mam też pytanie czy opłaca się jeszcze używać funkcji printf, przy użyciu tenchniki strumienia std w języku C++? |
Opłaca, 'printf' jest kilka razy szybszy od standardowych strumieni c++.
|
|
« 1 » 2 |