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

excepted primary-expression before "else" c++

Object Storage Arubacloud
+1 głos
503 wizyt
pytanie zadane 21 listopada 2020 w C i C++ przez GRZYBULAN Nowicjusz (130 p.)

Nie mam pojęcia co zrobiłem źle (to jest mały projekt do szkoły)

w dev cpp  zanzcza mi  w linijce  gdzie jest else if (powt==3)(to chyba 31 linijka)

#include<iostream>
#include<cstdlib>
using namespace std;
main()
{
etykieta:
int etykieta, error, powt, figura, end, pola;
string imie;
float a,b,r,pi,pole_k,pole_p,h,pole_trap,pole_troj,pole_kola,pole_rowno,pole_rombu,pole_rombu2;
pi = 3.14;
cout<<"Witaj! Przedstawie się, jestem kalkulator pol figur. Podaj mi swoje imie"<<endl;
cin>>imie;
cout<<"Witaj "<<imie<<" czego pole chcesz obliczyć? 1-Prostokat 2-Kwadrat 3-trapez 4-rownoleglobok 5-kolo"<<endl;
pola:
cin>>figura;
if(figura==1)
    { 
     cin>>a;
     cin>>b;
     pole_p=a*b  ;
     cout<<"Pole prostokąta wynosi "<<pole_p<<endl;
     goto end;
    }
else if (figura==2);
    {
     cin>>a;
     pole_k=a*a  ;
     cout<<"Pole kwadratu wynosi "<<pole_k<<endl;
     goto end;    
    }
else if (figura==3);
    {
    if ((a<=0)or(b<=0)or(h<=0))
    
    cout<<error<<endl;
    goto etykieta; 
    
    }
    else;
    {
         cin>>a;
         cin>>b;
         cin>>h;
         pole_trap=(a+b)*h*0.5; 
    }
    cout<<"pole trpaezu wynosi: "<<pole_trap<<endl;
    cout<<"powtorzyc? 9-TAK 0-NIE"<<endl;   }//tak bym to zrobił dla przykładu gdybym nie zdefiniował "end", ale zrobiłem to dla ułatwienia i wykorzystania szerszego "goto"
    cin>>powt;
         if(powt==9)
         {goto etykieta;}
    else(powt==0); 
    {cout<<"dzieki, autor-GRZYBOWSKI"<<endl; }
else if (figura==4);
    {
         cin>>a
         cin>>h
         pole_rowno=a*h
         cout<<"pole rownolegloboku wynosi: "<<pole_rowno<<endl;
         goto end;
    }
    else if (figura==5);
    {
         cin>>r;
         pole_kola=pi*(r*r);
         cout<<"pole kola wynosi "<<pole_kola<<endl;
         goto end;
    }
end:
cout<<"Czy chcesz powtórzyć program? 9-TAK 0-NIE"<<endl;
cin>>powt;
if(powt==9)
{
           goto etykieta;
}
else(powt==0);
{
    cout<<"Dziekuje za uzycie autor"<<endl;
}

system("pause");
return 0;
}


 

2 odpowiedzi

+1 głos
odpowiedź 21 listopada 2020 przez tangarr Mędrzec (154,780 p.)
Linie 24,31,53 - średnik po warunku przerywa konstrukcję if
komentarz 21 listopada 2020 przez GRZYBULAN Nowicjusz (130 p.)
Dziękuję, już poprawiam
komentarz 21 listopada 2020 przez GRZYBULAN Nowicjusz (130 p.)
Działa !

Dziękuję bardzo ale wciąż mam błędy, czy mógłbym uzyskać więcej pomocy?
komentarz 21 listopada 2020 przez GRZYBULAN Nowicjusz (130 p.)
Ten sam kod ale wyskakuje błąd

label "end" used but no defined

a mam zdefiniowany (ten sam kod)
2
komentarz 21 listopada 2020 przez tangarr Mędrzec (154,780 p.)

Dopiero teraz spojrzałem w ten kod.
I jestem przerażony.
Kod jest tak sformatowany, że nic w nim nie widać. Połowa kodu generuje błędy lub ostrzeżenia. Jakiego środowiska programistycznego używasz? Zdecydowanie musisz je skasować i się przesiąść na coś rozsądnego (QtCreator lub Visual Studio).
Gdybyś chociaż sformatował kod zgodnie ze sztuką to byś zauważył, że masz w środku kodu klamrę zamykającą, która wszystko psuje.
Tych średników po instrukcjach warunkowych masz jednak dużo więcej niż początkowo zauważyłem.
Zamiast konstrukcji "else if" próbujesz użyć samego "else".
Nawaliłeś pełno zmiennych, połowy nie używasz lub ich nie zainicjowałeś.
A użycie goto w ten sposób powoduje, że chce mi się płakać.

Kod wymaga gruntownego refaktoringu.
1. Wyrzuć obsługę każdej figury do osobnej funkcji.
2. Wewnątrz każdej funkcji zdefiniuj tylko takie zmienne, które ci są potrzebne.
3. Zainicjuj wszystkie zmienne.
4. Wywal całą konstrukcję goto i zrób pętlę while(true) lub for(;;) do sterowania programem.

komentarz 21 listopada 2020 przez VBService Ekspert (253,120 p.)

Dorzucę do tego co napisał @tangarr, zamiast pisania tylu bloków if(...) else if(...), rozważ użycie switch(zmienna) wink mała wskazówka do pkt. 4, komentarza @tangarr

Simple do while loop using while(true)

0 głosów
odpowiedź 21 listopada 2020 przez VBService Ekspert (253,120 p.)
edycja 21 listopada 2020 przez VBService

Moja propozycja uporządkowania nieco kodu wink

#include <iostream>

int main() {
    int action;
    std::string description, imie;
    float a, b, calculation;
	
	const float PI = 3.14;
    const std::string QUESTION_VALUE = "Podaj wartosc boku";
	
	std::cout << "Witaj! Przedstawie się, jestem kalkulator pol figur.\n"
	             "Podaj mi swoje imie: "; std::cin >> imie;
	std::cout << std::endl;
    
    while (true) {
		std::cout << "Witaj " << imie << " czego pole chcesz obliczyć?\n"
					 "1 - Prostokat\n"
					 "2 - Kwadrat\n"
					 "3 - Trapez\n"
					 "4 - Rownoleglobok\n"
					 "5 - Kolo" << std::endl;
		
		std::cin >> action;
		switch (action) {
			case 1:
				std::cout << QUESTION_VALUE << " a: "; std::cin >> a;
				std::cout << QUESTION_VALUE << " b: "; std::cin >> b;
				calculation = a * b;
				description = "prostokata";
			break;
			case 2:
				std::cout << QUESTION_VALUE << " a: "; std::cin >> a;
				calculation = a * a;
				description = "kwadratu";	
			break;

                         // ... itd dopisz reszte sam
		}

		std::cout << "Pole " << description << " wynosi: " << calculation << std::endl;
		
		std::cout << "Czy chcesz powtórzyć program? 1-TAK 0-NIE: "; std::cin >> action;
		if (action == 0) {
			std::cout << "Dziekuje za uzycie autor" << std::endl;
			break; // Opuszcenie petli while (true)
		}
	}

    return 0;
}

[ switch ] [ const ] [ How to write long strings in Multi-lines C/C++? ]
How to Terminate a Loop in C++? ] [ Simple do while loop using while(true) ]

Podobne pytania

0 głosów
1 odpowiedź 3,576 wizyt
0 głosów
1 odpowiedź 3,260 wizyt

92,555 zapytań

141,403 odpowiedzi

319,560 komentarzy

61,941 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!

...