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

C++ Program liczący z menu - proszę o udzielenie rady.

VPS Starter Arubacloud
0 głosów
1,022 wizyt
pytanie zadane 20 października 2018 w C i C++ przez flanek2 Nowicjusz (120 p.)

Witam,

Mam problem z kodem. Wyskakuje mi taki błąd:

main.cpp:151:14: error: jump to case label [-fpermissive]
         case 6:

Dopiero się uczę i nie wiem o co chodzi. Chciałbym, aby ktoś wskazał gdzie zrobiłem błąd.

#include <stdlib.h>
#include <iostream>
#include <cmath>
#include <iomanip>
#include <ncurses.h>
#include <stdlib.h>

using namespace std;

int main (int argc,char*argv[])

{
    int x=0;
    while(x>6||x<1)
    
    {
        cout<<"imie: XXXXXXXX"<<endl;
        cout<<"nazwisko: XXXXXXXXXXXX"<<endl;
        cout<<"klasa XX"<<endl;

        cout<<"MENU"<<endl;
        cout<<"[1]obliczam sume, roznice, iloczyn i iloraz dwoch liczb"<<endl;
        cout<<"[2]obliczam obwod i pole prostokata"<<endl;
        cout<<"[3]obliczam obwod i pole kola"<<endl;
        cout<<"[4]obliczam obwod i pole trojkata"<<endl;
        cout<<"[5]obliczam silnie"<<endl;
        cout<<"[6]rysuje choinke"<<endl;
       
        cout<<"wybieram: ";
        cin>>x;
        
        
        
    }
    
  switch (x)
   
    {
        case 1:
         float x,y,suma,roznica,iloczyn,iloraz;
    
    cout<<endl<<"podaj x:";
    cin>>x;
    cout<<"podaj y: ";
    cin>>y;
    
    suma = x+y;
    roznica = x-y;
    iloczyn = x*y;
    iloraz = x/y;
    
    cout<<endl<<"Dla x = "<<x<<", y = "<<y<<endl;
    cout<<"suma = "<<suma<<","<<endl;
    cout<<"roznica = "<<roznica<<","<<endl;
    cout<<"iloczyn = "<<iloczyn<<","<<endl;
    cout<<"iloraz = "<<iloraz<<","<<endl;
    
    break;
        
    
        case 2:
    
    int a,b,polep,obwodp;
    
    cout<<"podaj dlugosc boku a: ";
    cin>>a;
    cout<<"podaj dlugosc boku b: ";
    cin>>b;
    
    polep=a*b;
    obwodp=2*a+2*b;
    
    cout<<endl<<"pole prostokata o bokach "<<a<<" i "<<b<<" wynosi: "<<polep<<endl;
    cout<<"obwod prostokata o bokach "<<a<<" i "<<b<<" wynosi: "<<obwodp<<endl;  
    
    break;
    
    
        case 3:
        
    int r;
    
    float polek,obwodk;
    
    cout<<endl<<"podaj dlugosc promienia r: ";
    cin>>r;
    
    polek=M_PI*pow(r,2);
    obwodk=2*M_PI*r;
    
    cout<<"pole kola o promieniu "<< r <<" wynosi "<<polek<<endl;
    cout<<"obwod kola o promieniu "<< r <<" wynosi "<<obwodk<<endl;
    
    getch ();
    
    break;
    
        case 4:
    
    int t,h,c,p;
    
    float polet, obwodt;
    
    cout<<"podaj dlugosc pierwszego boku: ";
    cin>>t;
    cout<<"podaj dlugosc drugiego boku: ";
    cin>>h;
    cout<<"podaj dlugosc trzeciego boku: ";
    cin>>c;
    
    if(t+c<=h)
    {
        cout<<"Z tych odcinków nie można zbudować trójkąta!";
    }
   
    else if (t+h<=c)
    {
        cout<<"Z tych odcinków nie można zbudować trójkąta!"; 
    }
   
    else if (h+c<=t)
    {
        cout<<"Z tych odcinków nie można zbudować trójkąta!";
    }
    
    else
    {
        p=(t+h+c)/2;
        polet=sqrt(p*(p-t)*(p-h)*(p-c));
        obwodt=a+b+c;
        
        cout<<"pole trojkata o bokach: a= "<<t<<", b= "<<h<<", c="<<c<<"  wynosi: "<<polet<<endl;
        cout<<"obwod trojkata o bokach: a= "<<t<<",b= "<<h<<",c="<<c<<"  wynosi: "<<obwodt<<endl;
    }
    
    getch();
    
    break;
    
        case 5:
    unsigned int n;
    long long silnia=1;
      cout<<"podaj n: ";
      cin>>n;
    for (int i=n;i>1;i--)
            silnia*=i;
      cout<<n<<"!="<<silnia<<endl;
    
    break;
    
        case 6:
        
    int i=0,ii=0,ilosc_pieter;
    
    cout<<"podaj ilosc pieter choinki: ";
    cin>>ilosc_pieter;
    
    while (i<ilosc_pieter)
    {
    ii=0;
        while (ii<ilosc_pieter-i)
        {
            cout<<" ";
                      ++ii;
        }
    ii=0;
        while (ii<i*2+1)
        {
            cout<<"*";
                      ++ii;
        }
    cout<<endl;
    
    ++i;
    
    break;
    
        
    }    
    }  
  
    



}

 

1 odpowiedź

+2 głosów
odpowiedź 20 października 2018 przez RafalS VIP (122,820 p.)
edycja 20 października 2018 przez RafalS

https://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement

Otocz ciała case'ów klamrami, bo bez tego jest problem z zakresami zmiennych deklarowanych w case'ach. W tym momencie zakres zmiennych deklarowanych wewnatrz switcha to caly switch, wiec teoretycznie mógłbyś skoczyć do miejsca gdzie zmienna jeszcze nie jest zadeklarowana, a na to nie pozwala Ci kompilator.

Konstrukcja switch case opiera się na goto, dlatego kompilator zabrania Ci robic czegos takiego:

	goto lipa;
	string y = "no i pozamiatane";

lipa:
	cout << y << endl;

Rozwiązanie:

	switch (x)
	{
	case 1:
		int variable; //nie zadziala
		break;
	}

	switch (x)
	{
	case 1:
	{
		int variable; // zadziala
		break;
	}
	}

 

komentarz 20 października 2018 przez flanek2 Nowicjusz (120 p.)
Dzięki za pomoc. Już wszystko działa.

Podobne pytania

+1 głos
1 odpowiedź 235 wizyt
0 głosów
4 odpowiedzi 387 wizyt
pytanie zadane 25 czerwca 2019 w Java przez Dawkin Nowicjusz (190 p.)
0 głosów
1 odpowiedź 159 wizyt
pytanie zadane 31 grudnia 2020 w C i C++ przez patryk8 Początkujący (300 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...