switch, dość prosty program

0
#include <iostream>
#include <cmath>
#include <iomanip> 
#include <windows.h>
#include <cstdlib>

using namespace std;

void menu()
{
	
	cout << "[MENU PROJEKTORA]"<< endl << endl << endl;
	cout << "[1] Rozdzielczosc"<< endl << endl;
	cout << "[2] Gloscnosc"<<endl <<endl;
	cout << "[3] Jasnosc"<<endl <<endl;
	cout << "[4] OFF" << endl;

}

int main()
{
	poczatek:
  	char a;
    int jeden, dwa, trzy, cztery, piec, piec1, wybor, i, b, wroc2;    	
    cout << "##### System sterowania projektorem #####" <<endl <<endl; 
    
    cout << "[1] Wlacz Projektor: ";
 	cin >> jeden;
    switch( jeden )
    {
   
    case 1:    	
    		for ( i = 0; i < 100; i++ )
		{	
			system("CLS");  
			cout << "Zdejmowanie oslony z obiektywu... " << i << "%";
			Sleep(20);
		}
		system("CLS");
		cout << "Zdjeto oslone z obiektywu!";
		Sleep(3000);
    	
    	for ( i = 0; i < 100; i++ )
		{	
			system("CLS");  
			cout << "Nagrzewanie lampy... " << i << "%";
			Sleep(20);
		}
	system("CLS");
		cout << "Nagrzano Lampe!" << endl;
		Sleep(3000);
	system("CLS");
		
	}
    
   if (jeden == 1)
   {
   	wroc:
 		cout << "Brak obrazu?"<< endl << endl;
    	cout << "Czy kabel zostal podpiety?"<< endl << endl;
    	cout <<"[1] Tak"<<endl <<endl;
   		cout <<"[2] Nie"<<endl <<endl;
    	cout <<"Wybieram: ";
		 cin >> dwa;
	system("CLS");
	
   }
    switch ( dwa )	
   {
	
    case 1: cout<<"Wybrales(as) nr 1"<<endl <<endl;
            cout<<"Super!"<<endl <<endl;
    system("CLS");
                break;
                              
    case 2: cout<<"Wybrales(as) nr 2"<<endl <<endl;
              cout<<"Podłącz kabel!"<<endl <<endl;
                break;
    system("CLS");
    	
	}
	
	if (dwa == 1)
			
   {
   
	 	cout << "Projektor wyswietla obraz, ale nie z naszego urzadzenia..."<< endl << endl << endl;
	 	cout << "Wybierz zrodlo sygnalu"<< endl << endl;
	    cout <<"1.HDMI"<<endl <<endl;
	    cout <<"2.VGA"<<endl <<endl;
	    cout <<"Wybieram: ";
		 cin >> trzy;
	system("CLS");
   }
   
   else if(dwa == 2)
        {
           goto wroc;
        }
   
   switch ( trzy )	
   {
	
    case 1: cout<<"Wybrales(as) nr 1"<< endl << endl;
            cout<<"Sygnal ustawiony na HDMI"<< endl << endl;
                break;
    case 2: cout<<"Wybrales(as) nr 2"<< endl << endl;
            cout<<"Sygnal ustawiony na VGA"<< endl << endl;
    	
	}
		
	if (trzy == 1 || trzy == 2)
			
   {
   
 
   		cout << "[1] Rozwin ekran projekcyjny: ";
 		cin >> cztery;
 	
   }
    switch( cztery )
    {
   
    case 1:    	
    		for ( i = 0; i < 100; i++ )
		{	
		system("CLS");  
			cout << "Rozwijanie ekranu projekcyjnego ... " <<i <<"%";
			Sleep(20);
		}
		system("CLS");
			cout << "Ekran projekcyjny rozwiniety!";
			Sleep(3000);
		system("CLS");
		
	}
	
	if (cztery == 1)
	
	{	
	
	menu();
	wroc2:
cout << endl;
cout << "Wybor: ";
cin >>wybor;
cin.clear();
cin.sync();	

	}
	if (wybor==2 || wybor==3)
{
    cout << "\nPodaj przedział od 1 do 10: ";
    cin >> b;
    cin.clear();
    cin.sync();
}


if (wybor==1)
{
    
    cout << "\nWpisz FULL HD lub HD: ";
    cin >> a;
    cin.ignore();
   
}

if (wybor==4)
{
    
    cout << "\nCzy chcesz wyjsc? ( [1] Tak lub [0] NIE): ";
    cin >> a;
 
}

switch (wybor)
{
	case 1:
		
		cout << "Wybrana rozdzielczosc: " << a ;
		break;

	case 2:
		
		cout << "Wybrana gloscnosc: " << b ;
		break;
		
	case 3:
		
		cout << "Wybrana jasnosc: " << b ;
		break;
		
	case 4:
	    system("CLS");
	    
	    if (a == 0)
	    {
	    	goto wroc2;
		}
	    		else 
			for ( i = 0; i < 100; i++ )
		{	
			system("CLS");  
			cout << "Zakladnanie oslony projektora... " <<i <<"%";
			Sleep(30);
		}
			
			for ( i = 0; i < 100; i++ )
			{
			
			system("CLS");  
			cout << "Zwijanie ekranu projekcyjnego ... " <<i <<"%";
			Sleep(20);	
			}
		
		system("CLS");
		cout <<" Wylaczono Projektor oraz zwinięto ekran projekcyjny!";
		Sleep(5000);
		system("CLS");
		return 0;
		goto poczatek;
		
		break;
		
		default: cout << "Nie ma takjei opcji w menu!";
		
		}

		
char powrot;
cout << "\n\nQ: powrot do menu: ";
cin >> powrot;

if(powrot=='q' or powrot=='Q') //druga opcja if((powrot=='q')||(powrot=='Q'))
{
    system ("CLS");
	goto wroc2;
}
else
cout << "\nNarka\n";
		
	 cin.get(),cin.get();	
	 return 0;
   	 }
   	 

wiem, że kod wygląda strasznie ale dla mnie ważne jest by tylko działał. A z czym mam problem?
Da się do switcha wczytać wartość "literową" ? po wpisaniu np HD wyświetla mi się tylko samo H.


case 4:
	    system("CLS");
	    
	    if (a == 0)
	    {
	    	goto wroc2;
		}
	    		else 
			for ( i = 0; i < 100; i++ )
		{	
			system("CLS");  
			cout << "Zakladnanie oslony projektora... " <<i <<"%";
			Sleep(30);
		}
			
			for ( i = 0; i < 100; i++ )
			{
			
			system("CLS");  
			cout << "Zwijanie ekranu projekcyjnego ... " <<i <<"%";
			Sleep(20);	
			}
		
		system("CLS");
		cout <<" Wylaczono Projektor oraz zwinięto ekran projekcyjny!";
		Sleep(5000);
		system("CLS");
		return 0;
		goto poczatek;
		
		break;
		
		default: cout << "Nie ma takjei opcji w menu!";
		
		}

z tego case 4: chciałbym mieć możliwośc powrotu do menu, a w przeciwnym razie zamknąć program.
Pomożecie?

0

Próbujesz wpisać kilka liter do zmiennej char (z angielskiego znak) i jak sama nazwa wskazuje char może pomieścić tylko 1 znak.
Użyj std::string.

0

racja....

pozostaje do rozwiązania problem nr: 2

0

Czyli switch-case z stringami?

0

z tego case 4: chciałbym mieć możliwośc powrotu do menu, a w przeciwnym razie zamknąć program.

switch-case z stringami wcześniej pomogłeś mi rozwiązać :P

3

Widzę u Ciebie goto a to nie powinno się znaleźć. Bardzo mało jest przypadków kiedy goto jest dobrym rozwiązaniem. Możesz opakować to w jakąś pętle i z niej wychodzić po wybraniu odpowiedniej opcji.

0

goto wroc2 i poczatek nie dzialają, ale goto wroc spełnia swoją rolę więc go zostawię :P no a teraz przy tym problemie chetnie bym zrobil pętlę, ale mam z nimi problem - nie chca zazwyczaj dzialac

0

Ale jak, podajesz q i nic się nie dzieje czy jak?

0

Q normalnie dziala, wraca do MENU

0

goto poczatek nie zadziała bo masz:

return 0;
goto poczatek;

Przez to return 0 wyjdziesz z funkcji co oznacza że goto poczatek jest nieosiągalne.

0

goto to w ogóle zapomnij, że istnieje, bo się nauczysz złych nawyków i będziesz później je powielać.

0

no dobra, to teraz mógłby ktoś pokazać jak powinna wyglądać ta pętla ?

0

Na przykład tak:

int main()
{
    bool run = true;
    while(run)
    {
        // Wyświetl Menu
        switch(user_input)
        {
            // Opcje
            case 'Q':
                run = false;
                break;
        }
    }
    return 0;
}

Porozbijaj menu i podmenu na funkcje to będzie lepiej zapanować nad tym wszystkim.

0

no ok, ale jak do tego dać coś takiego, że

[MENU]
4. Wyjście

Czy chcesz wyłączyć projektor? TAK / NIE.

tak- wyłącz
nie- wstecz do menu

2

Zgaduję że po wyłączeniu projektora i tak następuje przejście do głównego menu a więc:

void projektor()
{
    if(wylacz)
    {
        // Wylacz projektor
    }
}

int main()
{
    bool run = true;
    while(run)
    {
        // Menu
        switch(user_input)
        {
            case 'P': // P jak projektor
                projektor();
                break;
            case 'Q':
                run = false;
                break;
        }
    }
    return 0;
}

Oczywiście ten switch-case można inaczej zorganizować - to jest tylko przykład.

0

dobra dzięki, muszę nad tym pomyśleć bo jakoś nie mam głowy teraz do tego by to wpasować w moje menu

0
#include <iostream>
#include <cmath>
#include <iomanip> 
#include <windows.h>
#include <cstdlib>

using namespace std;

void menu()
{

	cout << "[MENU PROJEKTORA]"<< endl << endl << endl;
	cout << "[1] Power ON"<< endl << endl;
	cout << "[1] Rozdzielczosc"<< endl << endl;
	cout << "[2] Gloscnosc"<<endl <<endl;
	cout << "[3] Jasnosc"<<endl <<endl;
	cout << "[4] Ekran projekcyjny"<<endl <<endl;
	cout << "[5] Power OFF" << endl;

}

int main()
{
	poczatek:
  	string a;
    int jeden, dwa, trzy, cztery, piec, wybor, i, b;    	
    cout << "##### System sterowania projektorem #####" <<endl <<endl; 
    
   if (wybor == 1)
   {
   	wroc:
 		cout << "Brak obrazu?"<< endl << endl;
    	cout << "Czy kabel zostal podpiety?"<< endl << endl;
    	cout <<"[1] Tak"<<endl <<endl;
   		cout <<"[2] Nie"<<endl <<endl;
    	cout <<"Wybieram: ";
		 cin >> dwa;
	system("CLS");
	
   }
    switch ( dwa )	
   {
	
    case 1: cout<<"Wybrales(as) nr 1"<<endl <<endl;
            cout<<"Super!"<<endl <<endl;
    system("CLS");
                break;
                              
    case 2: cout<<"Wybrales(as) nr 2"<<endl <<endl;
              cout<<"Podlacz kabel!"<<endl <<endl;
                break;
    system("CLS");
    
    	
	}
	
	if (dwa == 1)
			
   {
   
	 	cout << "Projektor wyswietla obraz, ale nie z naszego urzadzenia..."<< endl << endl << endl;
	 	cout << "Wybierz zrodlo sygnalu"<< endl << endl;
	    cout <<"1.HDMI"<<endl <<endl;
	    cout <<"2.VGA"<<endl <<endl;
	    cout <<"Wybieram: ";
		 cin >> trzy;
	system("CLS");
   }
   
   else if(dwa == 2)
        {
           goto wroc;
        }
   
   switch ( trzy )	
   {
	
    case 1: cout<<"Wybrales(as) nr 1"<< endl << endl;
            cout<<"Sygnal ustawiony na HDMI"<< endl << endl;
                break;
    case 2: cout<<"Wybrales(as) nr 2"<< endl << endl;
            cout<<"Sygnal ustawiony na VGA"<< endl << endl;
            
    	
	}
			
	wroc2:
	menu();
cout << endl;
cout << "Wybor: ";
cin >>wybor;
cin.clear();
cin.sync();	

if (wybor == 1)
{
cout << "[1] Wlacz Projektor: ";
 	cin >> jeden;
}

if (wybor==2)
{
    
    cout << "\nWpisz FHD lub HD: ";
    cin >> a;
    cin.clear();
    cin.sync();  
}
	if (wybor == 3 || wybor == 4)
{
    cout << "\nPodaj przedzial od 1 do 10: ";
    cin >> b;
    cin.clear();
    cin.sync();
}

	if (wybor == 5)
			
   {

   		cout << "[1] Rozwin ekran projekcyjny: ";
 		cin >> cztery;
 	
   }


bool run = true;
    while(run)
    {

switch (wybor)
{
	
	case 1:    	
    		for ( i = 0; i < 100; i++ )
		{	
			system("CLS");  
			cout << "Zdejmowanie oslony z obiektywu... " << i << "%";
			Sleep(20);
		}
		system("CLS");
		cout << "Zdjeto oslone z obiektywu!";
		Sleep(3000);
    	
    	for ( i = 0; i < 100; i++ )
		{	
			system("CLS");  
			cout << "Nagrzewanie lampy... " << i << "%";
			Sleep(20);
		}
	system("CLS");
		cout << "Nagrzano Lampe!" << endl;
		Sleep(3000);
	system("CLS");
		goto wroc;
	case 2:
		
		cout << "Wybrana rozdzielczosc: " << a ;
		break;

	case 3:
		
		cout << "Wybrana gloscnosc: " << b ;
		break;
		
	case 4:
		
		cout << "Wybrana jasnosc: " << b ;
		break;
		
	case 5:    	
    		for ( i = 0; i < 100; i++ )
		{	
		system("CLS");  
			cout << "Rozwijanie ekranu projekcyjnego ... " <<i <<"%";
			Sleep(20);
		}
		system("CLS");
			cout << "Ekran projekcyjny rozwiniety!";
			Sleep(3000);
		system("CLS");	
		break;
		
	case 6:
	    system("CLS");
			 for ( i = 0; i < 100; i++ )
        {   
            system("CLS");  
            cout << "Zakladnanie oslony projektora... " <<i <<"%";
            Sleep(30);
        }
 
            for ( i = 0; i < 100; i++ )
            {
 
            system("CLS");  
            cout << "Zwijanie ekranu projekcyjnego ... " <<i <<"%";
            Sleep(20);  
            }
 
        system("CLS");
        cout <<" Wylaczono Projektor oraz zwinieto ekran projekcyjny!";
        Sleep(5000);
        system("CLS");
		goto poczatek;
			
		default:
        std::cout << "ani jeden, ani dwa, ani trzy" << std::endl;
        break;
		
		}
		
char powrot;
cout << "\n\nQ: powrot do menu: ";
cin >> powrot;

if(powrot=='q' or powrot=='Q') //druga opcja if((powrot=='q')||(powrot=='Q'))
{
    system ("CLS");
    goto wroc2;
}
	}	
	 cin.get(),cin.get();	
	 return 0;
   	 }
   	 
   	 

kod wygląda tak, teraz przydałoby się mi to zabezpieczyć tak by nie można było podawać błędnych wartości

1 użytkowników online, w tym zalogowanych: 0, gości: 1