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

Nieudane zagnieżdżanie funkcji else...if...

Ostatnio zmodyfikowano 2016-10-23 19:36
Autor Wiadomość
matlofot
Temat założony przez niniejszego użytkownika
Nieudane zagnieżdżanie funkcji else...if...
» 2016-10-22 19:10:12
Witam,

moja przyjemność z C++ zaczęła się bardzo niedawno; pisząc program sprawdzający, czy dana liczba jest parzysta bądź nie i jednocześnie sprawdzający, czy dana liczba jest podzielna przez 3, natrafiłem na dość uciążliwy i chyba uciekający mi problem.

Oto kod problematycznego kawałka:



C/C++
//
if( a % 2 == 0 )
{ if( a % 3 == 0 ) cout << "\nLiczba " << a << " jest parzysta i jest podzielna przez 3."
    else cout << "\nLiczba " << a << " jest parzysta i nie jest podzielna przez 3." } //pierwszy problem, punkt A
else
{ if( a % 3 == 0 ) cout << "\nLiczba " << a << " jest nieparzysta i jest podzielna przez 3."
    else cout << "\nLiczba " << a << " jest nieparzysta i nie jest podzielna przez 3." //punkt B, ten sam problem co w punkcie A
         };

 

Podczas kompilowania program napotyka pierwszy problem w miejscu numer A, następnie w B: jest to ten sam error "expected ';' before 'else'".

Nie mam pojęcia o co chodzi, sprawdzałem dokładnie średniki, klamry i nawiasy w całym kodzie, wszystko zdaje się być na swoim miejscu.

Byłbym bardzo wdzięczny za pomoc.

Dziękuję za sugestię, mam nadzieję, że kod jest teraz czytelniejszy.
P-152765
mateczek
» 2016-10-22 19:33:21
i tak musisz sprawdzić 3 warunki. Poprawił bym twój kod ale jest niesformatowany i źle się czyta
[cpp]//kod wstawiaj między znaczniki[/cpp]
C/C++
#include<iostream>
using namespace std;

int main()
{
    int liczba;
    cin >> liczba;
    if(( liczba % 2 == 0 ) &&( liczba % 3 == 0 ) ) {
        cout << "podzielna przez 3 i pazysta";
    } else if(( liczba % 2 == 0 ) &&( liczba % 3 > 0 ) ) {
        cout << "tylko pazysta";
    } else if(( liczba % 2 > 0 ) &&( liczba % 3 == 0 ) ) {
        cout << "tylko podzielna przez 3";
    } else
         cout << "nie podzielna przez 3 i nie pazysta";
   
}
P-152766
pekfos
» 2016-10-23 12:23:08
jest to ten sam error "expected ';' before 'else'
Polecam czytać błędy, zamiast od razu kopiować je na forum. Nie stawiasz średników po instrukcjach.
P-152794
carlosmay
» 2016-10-23 13:34:34
sprawdzałem dokładnie średniki
C/C++
if( a % 2 == 0 )
{ if( a % 3 == 0 ) cout << "\nLiczba " << a << " jest parzysta i jest podzielna przez 3." // brak średnika
    else cout << "\nLiczba " << a << " jest parzysta i nie jest podzielna przez 3." } //brak średnika
else
{ if( a % 3 == 0 ) cout << "\nLiczba " << a << " jest nieparzysta i jest podzielna przez 3." // brak średnika
    else cout << "\nLiczba " << a << " jest nieparzysta i nie jest podzielna przez 3." // brak średnika
         }; // średnik niepotrzebny

No to ominąłeś cztery miejsca, gdzie powinny być, a wstawiłeś tam, gdzie jest zbędny.
P-152802
matlofot
Temat założony przez niniejszego użytkownika
» 2016-10-23 19:11:51
Dziękuję bardzo wszystkim, generalnie spodziewałem się większego roastu za taki prosty błąd, tym bardziej wielkie podziękowania za miłe traktowanie nowych użytkowników :))

Poczytałem troszkę o średnikach i nawet pojąłem, o co chodzi z moim błędem, dziękuję (niestety nie imiennie, bo nie umiem oznaczać innych użytkowników)!

Na swoje usprawiedliwienie dodaję, że rozumiem, co po angielsku ten error mi sygnalizuje, a po prostu niekoniecznie umiałem pojąć w czym tkwi mój średnikowy błąd; być może teraz cały ten temat wygląda na mniejsze zaśmiecanie forum.

Obecnie kod wygląda tak i chyba jest to wersja poprawna?

C/C++
//

if( a % 2 == 0 )
{ if( a % 3 == 0 ) cout << "\nLiczba " << a << " jest parzysta i jest podzielna przez 3.";
    else cout << "\nLiczba " << a << " jest parzysta i nie jest podzielna przez 3."; }
else
{ if( a % 3 == 0 ) cout << "\nLiczba " << a << " jest nieparzysta i jest podzielna przez 3.";
    else cout << "\nLiczba " << a << " jest nieparzysta i nie jest podzielna przez 3."; }

Pozdrawiam.

PS: Czy spacje przed klamrami są bardzo potrzebne?
P-152826
carlosmay
» 2016-10-23 19:36:50
Czy spacje przed klamrami są bardzo potrzebne?
Dla kompilatora nie ma to żadnego znaczenia. Dla czytelności kodu dla użytkownika,
może mieć. Pisz tak, żeby dobrze się czytało.
P-152828
« 1 »
  Strona 1 z 1