• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Expected initializer before int - o co chodzi?

Object Storage Arubacloud
0 głosów
18,419 wizyt
pytanie zadane 27 grudnia 2015 w C i C++ przez niezalogowany

Witam. Jestem początkującym koderem i miałem ochotę napisać swój pierwszy autorski program. Jest to program liczący nasze BMI. Tutaj mam kod:

#include <iostream>

using namespace std;

int waga, wzrost, x //x to nasze BMI

int main()
{
    cout << "Podaj swoja waga: " << ;
    cin >> waga

    cout << "Podaj swoj wzrost" << ;
    cin >> wzrost

    x=waga/(wzrost*wzrost)

    cout << "Twoje BMI to " <<x << endl;

    if (x<18.5);
    cout << "Niedowaga";
    if (x>18.6 && x<=25);
    cout << "Norma";
    if (x>26 && x<=30);
    cout << "Nadwaga";
    if (x>31);
    cout << "Otylosc";

    return 0;
}

Kiedy próbowałem ten program skompilować wyskakuje mi błąd na linii 7 - expected initializer before int.

Jestem początkującym koderem. Proszę o pomoc oraz dobre rady, jak uniknąć takich problemów w przyszłości. Jeszcze dodam, że uczę się z kursu pana Mirka Zelenta - to jest bardzo dobry nauczyciel.

Kompilator to Code::Blocks

5 odpowiedzi

+1 głos
odpowiedź 27 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)
edycja 27 grudnia 2015 przez Sebastian Fojcik

1. Słusznie, słusznie... w linijce 5 brakuje średnika wink

int waga, wzrost, x; // Teraz dobrze

2. To nie wszystko. Po co takie coś:

cout << "Podaj swoja waga: " << ;

Powinno być tak:

cout << "Podaj swoja waga: ";

3. 

if (x<18.5); // źle!
    cout << "Niedowaga";

Twój program ZAWSZE wypisze "Niedowaga" ponieważ postawiłeś średnik bezpośrednio po nawiasie if. Z resztą if'ów jest podobnie. Pokasuj te średniki:

if (x<18.5)        // Teraz if zadziała :)
    cout << "Niedowaga";

4. Kolejny błąd, to to, że waga, wzrost i są typu całkowitego int. A skoro te zmienne są całkowite, to wyrażenie:
x=waga/(wzrost*wzrost)
przypisze Ci do zmiennej x liczbę całkowitą. A skoro x jest liczbą całkowitą, to bez sensu sprawdzać taki warunek:
if( x < 18.5 )
Mój kompilator wypisuje mi warninga, że porównuję int z double. Ponieważ w C++ 18.5 jest traktowane jako double. Są to tak zwane stałe dosłowne... kiedyś się dowiesz ;-)
Zmień "int waga, wzrost, x;" ------------> "double waga, wzrost, x;"

No no... moja rada... uważnie pisz kod dopóki nie będziesz tego robił odruchowo ;-)

0 głosów
odpowiedź 27 grudnia 2015 przez niezalogowany
Zapomniałeś ; na końcu 5 linii
0 głosów
odpowiedź 27 grudnia 2015 przez adrian17 Ekspert (344,860 p.)

Kompilator to Code::Blocks

C::B to edytor, kompilator to G++ (GCC).

Niestety, G++ nie dał zbyt pomocnej podpowiedzi, może błąd Clanga Ci pomoże:

main.cpp:5:20: error: expected ';' after top level declarator
int waga, wzrost, x //x to nasze BMI
                   ^
                   ;
0 głosów
odpowiedź 27 grudnia 2015 przez notabigthreat Mądrala (7,060 p.)
int float waga, wzrost, x;

cout << "Podaj swoja waga: " << ;
cin >> waga;
 
cout << "Podaj swoj wzrost" << ;
cin >> wzrost;

x=waga/(wzrost*wzrost);

if (x<18.5);
cout << "Niedowaga";
if (x>18.6 && x<=25);
cout << "Norma";
if (x>26 && x<=30);
cout << "Nadwaga";
if (x>31);
cout << "Otylosc";

Nie, kompilator to nie Code::Blocks.

0 głosów
odpowiedź 27 grudnia 2015 przez niezalogowany

Poprawiłem, oto kod:

#include <iostream>

using namespace std;

double waga, wzrost, x; //x to nasze BMI

int main()
{
    cout << "Podaj swoja waga: " <<;
    cin >> waga

    cout << "Podaj swoj wzrost" <<;
    cin >> wzrost

    x=waga/(wzrost*wzrost)

    cout << "Twoje BMI to " <<x << endl;

    if (x<18.5)
    cout << "Niedowaga";
    if (x>18.6 && x<=25)
    cout << "Norma";
    if (x>26 && x<=30)
    cout << "Nadwaga";
    if (x>31)
    cout << "Otylosc";

    return 0;
}

Ale mi teraz wywala nowe błędy:

linijka 9 i 12 - expected primary-expression before ';' token

linijka 17 - expected ';' before 'cout'

komentarz 27 grudnia 2015 przez niezalogowany
W linijce 10, 13 i 15 zapomniałeś ;
komentarz 27 grudnia 2015 przez niezalogowany

#include <iostream>

using namespace std;

double waga, wzrost, x; //x to nasze BMI

int main()
{
    cout << "Podaj swoja waga: ";
    ;cin >> waga

    ;cout << "Podaj swoj wzrost: ";
    ;cin >> wzrost

    ;x=waga/(wzrost*wzrost)

    ;cout << "Twoje BMI to " <<x<<endl
    ;

    if (x<18.5)
    cout << "Niedowaga";
    if (x>18.6 && x<=25)
    cout << "Norma";
    if (x>26 && x<=30)
    cout << "Nadwaga";
    if (x>31)
    cout << "Otylosc";

    return 0;
}

Następnym razem muszę bacznie przyglądać się kodowi. Ludzie się uczą na błędach. Jak powiedział kiedyś pan Zelent: Nie od razu Kraków zbudowano:) Zamykam

komentarz 27 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)
@UP Matko Boska co to jest XDDDD
komentarz 27 grudnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Nie mam siły tłumaczyć co zrobiłeś źle. Czasami to, że działa nie wystarczy... Twój kod woła o pomstę do nieba :-D
Poprawię za Ciebie, bo nie wytrzymam XD

#include <iostream>

using namespace std;

double waga, wzrost, x; //x to nasze BMI

int main()
{
    cout << "Podaj swoja waga: ";
    cin >> waga;

    cout << "Podaj swoj wzrost: ";
    cin >> wzrost;

    x=waga/(wzrost*wzrost);

    cout << "Twoje BMI to " << x << endl;

    if (x < 18.5)
        cout << "Niedowaga";
    if (x > 18.6 && x <= 25)
        cout << "Norma";
    if (x > 26 && x <= 30)
        cout << "Nadwaga";
    if (x >31 )
        cout << "Otylosc";

    return 0;
}

Teraz jest dopiero pełna profeska wink

Podobne pytania

+1 głos
2 odpowiedzi 450 wizyt
0 głosów
0 odpowiedzi 299 wizyt
0 głosów
1 odpowiedź 3,596 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...