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

Zadanie domowe rozdział 17 problem z pętlą do...while

Ostatnio zmodyfikowano 2014-10-05 20:51
Autor Wiadomość
dafuck17
Temat założony przez niniejszego użytkownika
Zadanie domowe rozdział 17 problem z pętlą do...while
» 2014-10-05 19:26:11
Treść zadania:
Zmodyfikuj kalkulator, który pisałeś w jednym ze wcześniejszych rozdziałów tak, aby korzystał on ze wcześniej napisanej funkcji wczytajLiczbe.
Mój kod:
C/C++
#include <iostream>

void funkcje()
{
    using namespace std;
   
   
    cout << "Program ma nastepujace funkcje:" << endl;
    cout << "[1] Dodawanie " << endl;
    cout << "[2] Odejmowanie " << endl;
    cout << "[3] Mnozenie " << endl;
    cout << "[4] Dzielenie " << endl;
    cout << "[5] Rezygnuj " << endl;
    cout << "A teraz wprowadz 2 liczby potrzebne do wykonania dzialania..." << endl << endl;
   
   
}

int wczytajLiczbe()
{
    int liczba;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Wprowadz pierwsza liczbe:" << std::endl;
        std::cin >> liczba;
        if( liczba == false )
             std::cout << "Czy na pewno podales liczbe?" << std::endl;
       
    } while( !std::cin.good() );
   
    return liczba;
}

int wczytajdrugaliczbe()
{
    int liczba;
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Wprowadz druga liczbe:" << std::endl;
        std::cin >> liczba;
        if( liczba == false )
             std::cout << "Czy na pewno podales liczbe?" << std::endl;
       
    } while( !std::cin.good() );
   
    return liczba;
}

int wybierzdzialanie()
{
    using namespace std;
    int liczba;
    do
    {
        cout << "[1] Dodawanie " << endl;
        cout << "[2] Odejmowanie " << endl;
        cout << "[3] Mnozenie " << endl;
        cout << "[4] Dzielenie " << endl;
        cout << "[5] Rezygnuj " << endl;
        std::cin.clear();
        std::cin.sync();
        std::cout << "Wybierz opcje od 1 do 5:" << std::endl;
        std::cin >> liczba;
        if( liczba == false )
             std::cout << "Czy na pewno podales poprawna liczbe?" << std::endl;
       
    } while( !std::cin.good() || liczba < 1 || liczba > 5 );
   
    return liczba;
}

int main()
{
    using namespace std;
   
    funkcje();
   
   
    do
    {
       
        int liczba = wczytajLiczbe();
        int liczba2 = wczytajdrugaliczbe();
        int liczba3 = wybierzdzialanie();
       
       
       
        switch( liczba3 )
        {
        case 1:
            cout << "[1] Dodawanie " << liczba << " + " << liczba2 << " = " << liczba + liczba2 << endl;
            break;
        case 2:
            cout << "[2] Odejmowanie " << liczba << " - " << liczba2 << " = " << liczba - liczba2 << endl;
            break;
        case 3:
            cout << "[3] Mnozenie " << liczba << " * " << liczba2 << " = " << liczba * liczba2 << endl;
            break;
        case 4:
            cout << "[4] Dzielenie " << liczba << " / " << liczba2 << " = " << liczba / liczba2 << endl;
            break;
        case 5:
            cout << "[5] Rezygnuj " << " Zrezygnowales." << endl;
            break;
        } // switch
       
    } while( liczba3 != 5 );
   
    cout << "Zakonczyles program:)" << endl;
   
    return 0;
}
Błąd pojawia się przy
} while( liczba3 != 5 );
. Treść błędu: error: 'liczba3' was not declared in this scope
Wiem że przełożenie zmiennej przed pętle naprawi problem, ale ja chcę mieć te zmienne w pętli więc co mam zrobic? :(
P-117995
stryku
» 2014-10-05 19:51:42
No tego chyba raczej nie ominiesz skoro kompilator krzyczy. Czemu tak bardzo chcesz mieć je w pętli?

Z resztą to trochę bez sensu co chcesz zrobić bo to tak jakbyś zrobił
C/C++
int main()
{
   
    if( liczba == 2 )
    {
        int liczba = /* ... */
    }
   
    return 0;
}
P-117997
Rashmistrz
» 2014-10-05 20:09:22
Ja bym przeniósł przed pętlę i wstawił po switchu pobieranie liczb.
C/C++
int liczba = wczytajLiczbe();
int liczba2 = wczytajdrugaliczbe();
int liczba3 = wybierzdzialanie();
do {
    switch( liczba3 ) {
        //...
    } // switch
    liczba = wczytajLiczbe();
    liczba2 = wczytajdrugaliczbe();
    liczba3 = wybierzdzialanie();
} while( liczba3 != 5 );

P-117998
dafuck17
Temat założony przez niniejszego użytkownika
» 2014-10-05 20:15:44
@stryku
Miałem zamiar dać to do pętli, aby po zakończeniu jednego działania można było ponownie wybierać nowe liczby i robić nowe działania aż do klikniecia
"[5] Rezygnuj "
@rachmistrz
Dzięki, uzyskałem to po chciałem ;)

Ale teraz mam inny problem, bo gdy kończy się jedna pętla i zaczyna się druga (wpisuje nowe liczby i np inny nr działania) to niezależnie jakie bym liczby wpisał w drugiej pętli to i tak wynik oraz wybrany nr działania będzie taki sam jak w pętli pierwszej. Nie wiem czy dobrze wytłumaczyłem, więc macie screena: http://www.iv.pl/images/05258962886637431901.png
P-118000
Rashmistrz
» 2014-10-05 20:51:19
Mój nick to Rashmistrz. (https://translate.google.pl​/#en/pl/rash)

Podaj aktualny kod który Ci nie działa, bo u mnie co jest to działa dobrze:

C/C++
#include <iostream>
void funkcje() {
    using namespace std;
    cout << "Program ma nastepujace funkcje:" << endl;
    cout << "[1] Dodawanie " << endl;
    cout << "[2] Odejmowanie " << endl;
    cout << "[3] Mnozenie " << endl;
    cout << "[4] Dzielenie " << endl;
    cout << "[5] Rezygnuj " << endl;
    cout << "A teraz wprowadz 2 liczby potrzebne do wykonania dzialania..." << endl << endl;
}
int wczytajLiczbe() {
    int liczba;
    do {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Wprowadz pierwsza liczbe:" << std::endl;
        std::cin >> liczba;
        if( liczba == false )
             std::cout << "Czy na pewno podales liczbe?" << std::endl;
       
    } while( !std::cin.good() );
   
    return liczba;
}
int wczytajdrugaliczbe() {
    int liczba;
    do {
        std::cin.clear();
        std::cin.sync();
        std::cout << "Wprowadz druga liczbe:" << std::endl;
        std::cin >> liczba;
        if( liczba == false )
             std::cout << "Czy na pewno podales liczbe?" << std::endl;
       
    } while( !std::cin.good() );
   
    return liczba;
}
int wybierzdzialanie() {
    using namespace std;
    int liczba;
    do {
        cout << "[1] Dodawanie " << endl;
        cout << "[2] Odejmowanie " << endl;
        cout << "[3] Mnozenie " << endl;
        cout << "[4] Dzielenie " << endl;
        cout << "[5] Rezygnuj " << endl;
        std::cin.clear();
        std::cin.sync();
        std::cout << "Wybierz opcje od 1 do 5:" << std::endl;
        std::cin >> liczba;
        if( liczba == false )
             std::cout << "Czy na pewno podales poprawna liczbe?" << std::endl;
       
    } while( !std::cin.good() || liczba < 1 || liczba > 5 );
   
    return liczba;
}
int main() {
    using namespace std;
    funkcje();
    int liczba = wczytajLiczbe();
    int liczba2 = wczytajdrugaliczbe();
    int liczba3 = wybierzdzialanie();
    do {
        switch( liczba3 ) {
        case 1:
            cout << "[1] Dodawanie " << liczba << " + " << liczba2 << " = " << liczba + liczba2 << endl;
            break;
        case 2:
            cout << "[2] Odejmowanie " << liczba << " - " << liczba2 << " = " << liczba - liczba2 << endl;
            break;
        case 3:
            cout << "[3] Mnozenie " << liczba << " * " << liczba2 << " = " << liczba * liczba2 << endl;
            break;
        case 4:
            cout << "[4] Dzielenie " << liczba << " / " << liczba2 << " = " << liczba / liczba2 << endl;
            break;
        case 5:
            cout << "[5] Rezygnuj " << " Zrezygnowales." << endl;
            break;
        } // switch
        liczba = wczytajLiczbe();
        liczba2 = wczytajdrugaliczbe();
        liczba3 = wybierzdzialanie();
    } while( liczba3 != 5 );
   
    cout << "Zakonczyles program:)" << endl;
    return 0;
}
P-118008
« 1 »
  Strona 1 z 1