C++-Problem z kalkulatorem z użyciem funkcji.

0

Jestem raczej początkującym w c++ i mam taki oto błąd

 #include <iostream>

using namespace std;

int dodaj (int x ,int y)
{
    return x + y;
}
int odejmowanie (int x,int y)
{
    return x - y;
}
int main()
{
    int x,y;


    cout << "wpisz liczby:" << endl;
    cin >> x >> y;
    cout << "wybierz operacje\n1.dodawanie\n";
    cout << "2.odejmowanie\n3.mnożenie\n4.dzielenie\n";
    int operacja;
    cin >> operacja;
    switch (operacja)
    {
    case 1:
        int wynik = dodaj(x , y);
        cout << "Oto twój wynik:" << wynik << endl;
        break;
    case 2:
        int wynik2 = odejmowanie(x,y);
        cout << "Oto twój wynik:" << wynik2 << endl;
        break;
    }



    return 0;
}

cały czas wyświetla mi się taki komunikat przy drugim case'ie: error: crosses initialization of 'int wynik'. Nie mam pojęcia o co chodzi przecież zmienna w drugim casie ma inną nazwe...

2

Możesz wziąć zawartość case'a w wąstate nawiasy - {}
http://stackoverflow.com/questions/2392655/what-are-the-signs-of-crosses-initialization

0

Tak z innej beczki - potrzebne w ogóle są te zmienne "wynik" (pomijając polskie nazwy)? Przecież można np. tak:

cout << "Oto twój wynik: " <<dodaj(x,y) << endl;
0

Pewnie Twój kompilator nie pozwala na deklarowanie zmiennych w case'ach. Najlepiej przed switchem zadeklaruj zmienną wynik, potem w case'ach będziesz tylko modyfikować wynik a po całym switchu wypiszesz wynik. Fakt, ma to swoje minusy (gdy użytkownik wybierze inną operację niż obsługiwane), ale zapis będzie bardziej zgodny z DRY :)

1
    case 1:
        int wynik = dodaj(x , y);
        cout << "Oto twój wynik:" << wynik << endl;
        break;

To nie wina kompilatora, tylko kodu. Trzeba dodać klamry:

    case 1:
    {
        int wynik = dodaj(x , y);
        cout << "Oto twój wynik:" << wynik << endl;
        break;
    }
0

Zaprzęgnąłem Xcode, żeby pokazać komunikat o błędzie ;)
Problem w case 2 wynika z kodu w case 1. Po prostu zmienna wynik nie będzie widoczna w tym samym bloku kodu. dlatego ludzie tutaj zalecają dodanie nawiasów syntaktycznych, bo wtedy tworzysz nowy blok kodu, z którego zmienne są niewidoczne w case 2 i wszystkich kolejnych case'ach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1