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

Błąd podczas kompilacji JUMP TO CASE LABEL -FPERMISSIVE , CROSSES INITIALIZATION OF INT K.

Object Storage Arubacloud
0 głosów
3,373 wizyt
pytanie zadane 10 listopada 2016 w C i C++ przez Damian Rapacz Nowicjusz (170 p.)

Witam, w poniższym kodzie pojawia się błąd:

[Error] jump to case label [-fpermissive]

[Error] crosses initialization of 'int k'

Błąd jest w 78, 105 oraz 108 linii.

Kod nie jest w pełni skończony, gdyż pojawia mi się ten oto błąd i nie wiem gdzie go popełniłem. 

 

#include <iostream>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <string>

using namespace std;

void FontColor(); //funkcja ktora wybiera kolor czcionki

class Dane { //klasa dane
	protected: //chronione zmienne
	string imie;
	string nazwisko;
	public: //publiczne metody/funkcje
	void PodajDane();
	void Powitanie();
};

void Dodawanie();	
void Odejmowanie();	   
void Mnozenie();		
void Dzielenie();


int main(int argc, char *argv[]) { 
	Dane * Dane0 = new Dane; //konstruktor 
	Dane0->PodajDane(); //wczytaj funkcje
	Sleep(3000); //spij 3sec
	system("cls"); //wyczysc ekran
	Dane0->Powitanie(); //wczytaj funkcje
	cout << endl;
	cout<<"################################################# \n";
	cout << endl;
	FontColor();

	int x = 0;
	while(x>3 || x<1) { //instrukcja while
		cout<<"Wybierz co chcesz zrobic.. \n";
		cout<<"1. Oblicz Delte..\n";
		cout<<"2. Wlacz kalkulator\n";
		cout<<"3. Czy masz dzis szczescie?\n";
		cout<<"Wybieram: ";
		cin>>x;
		system("cls");
	}
	switch(x){
	case 1: {
	float a, b, c, delta, x0, x1, x2; //zmienne dla delty
	cout << "Podaj pierwsza liczbe: \n";
	cin >> a;
	cout << "Podaj druga liczbe: \n";
	cin >> b;
	cout << "Podaj trzecia liczbe: \n";
	cin >> c;

	delta = (b*b) - (4 * a*c); //wzor delta

	cout << "Delta wynosi: " << delta << endl;
	cout << "Pierwiastek z delty wynosi " << sqrt(delta) << endl; //math.h sqrt czyli pierwiastek z delty

	if (delta>0) { //instrukcja warunkowa IF
		cout << "x1=" << (-b - sqrt(delta)) / 2 * a << endl; //obliczenie x1
		cout << "x2=" << (-b + sqrt(delta)) / 2 * a << endl; //obliczenie x2
		cout << "Delta ma dwa rozwiazania! \n";
	}
	else if (delta == 0) {
		cout << "x0=" << (-b) / 2 * a << endl; //obliczenie x0
		cout << "Delta ma jedno rozwiazanie! \n";
	}
	else if (delta<0) {
		cout << "Delta nie ma rozwiazan! \n";
	}
	}
	break;
	case 2:
		
		int k = 0;
		while(x>4 || x<1) {
		cout<<"Wybierz co chcesz zrobic: \n";
		cout<<"1. Dodawanie..\n";
		cout<<"2. Odejmowanie..\n";
		cout<<"3. Mnozenie..\n";
		cout<<"4. Dzielenie..\n";
		cout<<"Wybieram: ";
		cin>>k;
	}
		switch(k) {
			case 1: {
				Dodawanie();
			}
				break;
			case 2: {
	     	}
				break;
			case 3: {
	    	}
				break;
			case 4: {
			}
				break;
			
		}
		break;
	case 3:
		cout<<"tak\n";
		break;
	 default: {
            cout << "Brak opcji!\n";
            break;
        }	
	}
	system("PAUSE"); //pause
	return EXIT_SUCCESS; //jezeli wszystko bedzie poprawnie - zakoncz zadanie
}

void FontColor() { //kolor czcionki
	HANDLE fontcolor; //uchwyc fontcolor
	fontcolor = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(fontcolor, FOREGROUND_GREEN | FOREGROUND_INTENSITY); //intensywny zielony kolor
}

void Dane::PodajDane() { //cala zmienna podaj dane
	cout << "Podaj imie: \n";
	cin >> imie;
	cout << "Podaj nazwisko: \n";
	cin >> nazwisko;
}

void Dane::Powitanie() { //cala zmienna powitanie
	cout << "Witaj " << imie << " " << nazwisko << endl;
}

void Dodawanie(int z, int v) {
	cout<<"Podaj dwie liczby, ktore chcesz dodac: ";
	cin>>z;
	cin>>v;
	int dWynik = z + v;
	cout<<z+v<<"="<<dWynik<<endl;
}

 

2 odpowiedzi

0 głosów
odpowiedź 10 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 10 listopada 2016 przez plkpiotr
 
Najlepsza

Troszkę uzbierało się nam błędów, rzuć okiem na poprawiony kod - szczególnie na zaznaczone przeze mnie linijki:

#include <iostream>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <string>

using namespace std;

void FontColor(); //funkcja ktora wybiera kolor czcionki

class Dane { //klasa dane
protected: //chronione zmienne
    string imie;
    string nazwisko;
public: //publiczne metody/funkcje
    void PodajDane();
    void Powitanie();
};

void Dodawanie();
void Odejmowanie();
void Mnozenie();
void Dzielenie();


int main(int argc, char *argv[]) {
    Dane * Dane0 = new Dane; //konstruktor
    Dane0->PodajDane(); //wczytaj funkcje
    Sleep(3000); //spij 3sec
    system("cls"); //wyczysc ekran
    Dane0->Powitanie(); //wczytaj funkcje
    cout << endl;
    cout << "################################################# \n";
    cout << endl;
    FontColor();

    int x = 0;
    do { //instrukcja do..while
        cout << "Wybierz co chcesz zrobic.. \n";
        cout << "1. Oblicz Delte..\n";
        cout << "2. Wlacz kalkulator\n";
        cout << "3. Czy masz dzis szczescie?\n";
        cout << "Wybieram: ";
        cin >> x;
        system("cls");
        switch (x) {
        case 1: {
            float a, b, c, delta, x0, x1, x2; //zmienne dla delty
            cout << "Podaj pierwsza liczbe: \n";
            cin >> a;
            cout << "Podaj druga liczbe: \n";
            cin >> b;
            cout << "Podaj trzecia liczbe: \n";
            cin >> c;

            delta = (b * b) - (4 * a * c); //wzor delta

            cout << "Delta wynosi: " << delta << endl;
            cout << "Pierwiastek z delty wynosi " << sqrt(delta) << endl; //math.h sqrt czyli pierwiastek z delty

            if (delta > 0) { //instrukcja warunkowa IF
                cout << "x1=" << (-b - sqrt(delta)) / 2 * a << endl; //obliczenie x1
                cout << "x2=" << (-b + sqrt(delta)) / 2 * a << endl; //obliczenie x2
                cout << "Delta ma dwa rozwiazania! \n";
            } else if (delta == 0) {
                cout << "x0=" << (-b) / 2 * a << endl; //obliczenie x0
                cout << "Delta ma jedno rozwiazanie! \n";
            } else if (delta < 0) {
                cout << "Delta nie ma rozwiazan! \n";
            }
        }
        break;
        case 2: {
            int k = 0;
            do {
                cout << "Wybierz co chcesz zrobic: \n";
                cout << "1. Dodawanie..\n";
                cout << "2. Odejmowanie..\n";
                cout << "3. Mnozenie..\n";
                cout << "4. Dzielenie..\n";
                cout << "Wybieram: ";
                cin >> k;
                switch (k) {
                case 1: {
                    Dodawanie();
                }
                break;
                case 2: {
                }
                break;
                case 3: {
                }
                break;
                case 4: {
                }
                break;

                }
            } while(x >=1 && x <= 4)
            break;
        }
        case 3:
            cout << "tak\n";
            break;
        default: {
            cout << "Brak opcji!\n";
            break;
        }
        }
    } while(x >=1 && x <= 3);
    system("PAUSE"); //pause
    return EXIT_SUCCESS; //jezeli wszystko bedzie poprawnie - zakoncz zadanie
}

void FontColor() { //kolor czcionki
    HANDLE fontcolor; //uchwyc fontcolor
    fontcolor = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(fontcolor, FOREGROUND_GREEN | FOREGROUND_INTENSITY); //intensywny zielony kolor
}

void Dane::PodajDane() { //cala zmienna podaj dane
    cout << "Podaj imie: \n";
    cin >> imie;
    cout << "Podaj nazwisko: \n";
    cin >> nazwisko;
}

void Dane::Powitanie() { //cala zmienna powitanie
    cout << "Witaj " << imie << " " << nazwisko << endl;
}

void Dodawanie() {
    int z, v;
    cout << "Podaj dwie liczby, ktore chcesz dodac: ";
    cin >> z;
    cin >> v;
    int dWynik = z + v;
    cout << z + v << "=" << dWynik << endl;
}
  • W porządku - przypisujesz zmiennej x wartość 0. Pętla while zaczyna się wykonywać, jednak Twój warunek wewnątrz niej jest niepoprawny - spróbuj go narysować na osi, nie ma prawa działać... Zrobiłbym to pętlą do..while, tzn. nie ważne co jest przed pętlą - ona i tak się wykona przynajmniej raz, a czy dalej się będzie wykonywać, to już zależy od tego co wewnątrz niej się dzieje... (dwukrotnie w Twoim kodzie).
  • Jeżeli chcesz aby wyboru (switch) można było wielokrotnie używać, trzeba zawrzeć go w pętli (również dwukrotnie).
  • Bądźmy konsekwentni co do nagłówków funkcji, owszem można przeciążać funkcje, jednak u Ciebie prototyp funkcji dodającej nie zgadał się z definicją, chodzi o ilość przyjmowanych argumentów. Jeśli ich funkcja nie przyjmuje, to należy zadeklarować je w funkcji.
  • Przy zagnieżdżaniu pętli, czy opcji wyboru (switch) warto skorzystać z funkcji Format use AStyle, jeżeli działasz w środowisku Code::Blocks, wtedy automatycznie kod zostanie wyrównany i wtedy łatwiej zobaczyć, czy odpowiednie instrukcje są na swoim miejscu.

Powinno śmigać ; ) 
Powodzenia w dalszym kodzeniu : )

1
komentarz 10 listopada 2016 przez Damian Rapacz Nowicjusz (170 p.)

Bardzo dziękuję za wytłumaczenie wszelkich błędów! Postaram się zwracać na to uwagę i nie robić tego drugi raz. Jeszcze raz bardzo dziękuję! smiley

1
komentarz 10 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)

Nie ma sprawy ; )
Przy poznawaniu nowych pojęć, a szczególnie przy przelewaniu swoich pomysłów na język programowania są one nieuniknione : ) Wypunktowałem wszystko krok po kroku, byś mógł prześledzić co jest nie tak, czasem dobrze gdy ktoś z zewnątrz rzuci okiem na nasz kod...

1
komentarz 10 listopada 2016 przez Damian Rapacz Nowicjusz (170 p.)
Tak, to jest naprawdę świetne. Uczę się w sumie c++ od niedawna, bo brak chęci przede wszystkim.. Także naprawdę doceniam twoją pomoc. Dziękuję.
0 głosów
odpowiedź 10 listopada 2016 przez Myśliwy Gaduła (3,080 p.)

zrób klamry między case 2: {  int k = 0; ...  break; } żeby k wiedziało kiedy ma przestać być

komentarz 10 listopada 2016 przez Damian Rapacz Nowicjusz (170 p.)
Tego błędu się już pozbyłem, lecz dziękuję bardzo za pomoc. Teraz mi wyskakuję błąd ze zmienną v oraz z a mianowicie:

z was not declared in this scope..
komentarz 10 listopada 2016 przez Myśliwy Gaduła (3,080 p.)
Możesz wkleić jeszcze raz swój poprawiony kod i wskazać w której linii masz błąd?
komentarz 10 listopada 2016 przez Damian Rapacz Nowicjusz (170 p.)

Błąd jest w linii 92.

 

#include <iostream>
#include <math.h>
#include <windows.h>
#include <conio.h>
#include <string>


using namespace std;

void FontColor(); //funkcja ktora wybiera kolor czcionki

class Dane { //klasa dane
	protected: //chronione zmienne
	string imie;
	string nazwisko;
	public: //publiczne metody/funkcje
	void PodajDane();
	void Powitanie();
};

void Dodawanie(int z,int v);	
void Odejmowanie();	   
void Mnozenie();		
void Dzielenie();


int main(int argc, char *argv[]) { 
	Dane * Dane0 = new Dane; //konstruktor 
	Dane0->PodajDane(); //wczytaj funkcje
	Sleep(3000); //spij 3sec
	system("cls"); //wyczysc ekran
	Dane0->Powitanie(); //wczytaj funkcje
	cout << endl;
	cout<<"################################################# \n";
	cout << endl;
	FontColor();

	int x = 0;
	while(x>3 || x<1) { //instrukcja while
		cout<<"Wybierz co chcesz zrobic.. \n";
		cout<<"1. Oblicz Delte..\n";
		cout<<"2. Wlacz kalkulator\n";
		cout<<"3. Czy masz dzis szczescie?\n";
		cout<<"Wybieram: ";
		cin>>x;
		system("cls");
	}
	switch(x){
	case 1: {
	float a, b, c, delta, x0, x1, x2; //zmienne dla delty
	cout << "Podaj pierwsza liczbe: \n";
	cin >> a;
	cout << "Podaj druga liczbe: \n";
	cin >> b;
	cout << "Podaj trzecia liczbe: \n";
	cin >> c;

	delta = (b*b) - (4 * a*c); //wzor delta

	cout << "Delta wynosi: " << delta << endl;
	cout << "Pierwiastek z delty wynosi " << sqrt(delta) << endl; //math.h sqrt czyli pierwiastek z delty

	if (delta>0) { //instrukcja warunkowa IF
		cout << "x1=" << (-b - sqrt(delta)) / 2 * a << endl; //obliczenie x1
		cout << "x2=" << (-b + sqrt(delta)) / 2 * a << endl; //obliczenie x2
		cout << "Delta ma dwa rozwiazania! \n";
	}
	else if (delta == 0) {
		cout << "x0=" << (-b) / 2 * a << endl; //obliczenie x0
		cout << "Delta ma jedno rozwiazanie! \n";
	}
	else if (delta<0) {
		cout << "Delta nie ma rozwiazan! \n";
	}
	}
	break;
	case 2: {
		
	int k=0;
		
		while(x>4 || x<1) {
		cout<<"Wybierz co chcesz zrobic: \n";
		cout<<"1. Dodawanie..\n";
		cout<<"2. Odejmowanie..\n";
		cout<<"3. Mnozenie..\n";
		cout<<"4. Dzielenie..\n";
		cout<<"Wybieram: ";
		cin>>k;
	}
		switch(k) {
			case 1: {
				Dodawanie(z,v);
			}
				break;
			case 2: {
	     	}
				break;
			case 3: {
	    	}
				break;
			case 4: {
			}
				break;
		}
	
		break; }
	case 3: {

		cout<<"tak\n";
		break;
	 default: {
            cout << "Brak opcji!\n";
        }
            break;
        }	
	}
	system("PAUSE"); //pause
	return EXIT_SUCCESS; //jezeli wszystko bedzie poprawnie - zakoncz zadanie
}

void FontColor() { //kolor czcionki
	HANDLE fontcolor; //uchwyc fontcolor
	fontcolor = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(fontcolor, FOREGROUND_GREEN | FOREGROUND_INTENSITY); //intensywny zielony kolor
}

void Dane::PodajDane() { //cala zmienna podaj dane
	cout << "Podaj imie: \n";
	cin >> imie;
	cout << "Podaj nazwisko: \n";
	cin >> nazwisko;
}

void Dane::Powitanie() { //cala zmienna powitanie
	cout << "Witaj " << imie << " " << nazwisko << endl;
}

void Dodawanie(int z, int v) {
	cout<<"Podaj dwie liczby, ktore chcesz dodac: ";
	cin>>z;
	cin>>v;
	int dWynik = z + v;
	cout<<z+v<<"="<<dWynik<<endl;
}

 

komentarz 10 listopada 2016 przez Myśliwy Gaduła (3,080 p.)
Funkcja Dodawanie niepotrzebnie wymaga argumentów z i v, jeżeli później właśnie o nie pyta użytkownika. Przenieś deklarację z i v do środka tej funkcji, a usuń z listy argumentów.
komentarz 10 listopada 2016 przez Damian Rapacz Nowicjusz (170 p.)
Dziękuję bardzo za pomoc!! :)

Podobne pytania

0 głosów
0 odpowiedzi 547 wizyt
0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 2 kwietnia 2019 w C i C++ przez nooby Nowicjusz (120 p.)
–1 głos
0 odpowiedzi 642 wizyt
pytanie zadane 26 maja 2017 w C i C++ przez KrzysztofMoryson Nowicjusz (170 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...