Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Błedne działanie programu

Ostatnio zmodyfikowano 2011-05-08 14:43
Autor Wiadomość
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
C/C++
#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;
}
P-32832
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'...
P-32834
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.
P-32835
SeaMonster131
» 2011-05-08 11:16:25
Poprawnie tak powinno być:

C/C++
case 1:
//blabla
break;

case 2:
//blabla
break;

Oraz mógłbyś to dać w pętle zamiast pisać
if( liczba ) { }
P-32836
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ł
C/C++
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.
P-32837
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:
C/C++
#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;
}
P-32838
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++?
P-32840
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++.
P-32841
« 1 » 2
  Strona 1 z 2 Następna strona