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

Problem z danymi w zmiennej char

0 głosów
75 wizyt
pytanie zadane 25 listopada 2021 w C i C++ przez Kajetan_ Nowicjusz (140 p.)

Hej, zaczynam uczyć się programować i postawiłem sobie za zadanie, żeby stworzyć program, który będzie imitował prosty sklep. Niestety mam problem, bo program nie czyta mi zmiennych xs oraz xl. Zgaduję, że to dlatego bo w char można zapisać tylko jeden znak. Co mógłbym zmienić w kodzie, by program czytał wartości xs i xl.

#include <iostream>

using namespace std;

int produkt;
char rozmiar;

int main()
{
	cout<<"Witaj w naszym sklepie!"<<endl;
	cout<<endl;
	cout<<"-----------------------"<<endl;
	cout<<"Dostepne produkty: "<<endl;
	cout<<endl;
	cout<<"1. Koszulka"<<endl;
	cout<<"2. Spodenki"<<endl;
	cout<<"3. Majtki"<<endl;
	cout<<"4. Bluza"<<endl;
	
	cout<<"Wybierz produkt, ktory chcesz zakupic: "<<endl;
	cin>> produkt;
	
	switch(produkt)
	{
		case 1:
			{
				cout<<"Wybierz rozmiar: ";
				cin>>rozmiar;
				switch(rozmiar)
				{
					case 'xs':
					cout<<"Udalo Ci sie zamowic koszulke w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 's':
					cout<<"Udalo Ci sie zamowic koszulke w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'm':
					cout<<"Udalo Ci sie zamowic koszulke w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'l':
					cout<<"Udalo Ci sie zamowic koszulke w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'xl':
					cout<<"Udalo Ci sie zamowic koszulke w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					default:
						cout<<"Nie mamy takiego rozmiaru"<<endl;
				}
			}
			break;
			
			case 2:
				{
					cout<<"Wybierz rozmiar: ";
				cin>>rozmiar;
				switch(rozmiar)
				{
					case 'xs':
					cout<<"Udalo Ci sie zamowic spodenki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 's':
					cout<<"Udalo Ci sie zamowic spodenki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'm':
					cout<<"Udalo Ci sie zamowic spodenki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'l':
					cout<<"Udalo Ci sie zamowic spodenki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'xl':
					cout<<"Udalo Ci sie zamowic spodenki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					default:
						cout<<"Nie mamy takiego rozmiaru"<<endl;
				}
				}
				break;
				
			case 3:
				{
					cout<<"Wybierz rozmiar: ";
				cin>>rozmiar;
				switch(rozmiar)
				{
					case 'xs':
					cout<<"Udalo Ci sie zamowic majtki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 's':
					cout<<"Udalo Ci sie zamowic majtki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'm':
					cout<<"Udalo Ci sie zamowic majtki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'l':
					cout<<"Udalo Ci sie zamowic majtki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'xl':
					cout<<"Udalo Ci sie zamowic majtki w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					default:
						cout<<"Nie mamy takiego rozmiaru"<<endl;
				}
				}
				break;
				
			case 4:
				{
					cout<<"Wybierz rozmiar: ";
				cin>>rozmiar;
				switch(rozmiar)
				{
					case 'xs':
					cout<<"Udalo Ci sie zamowic bluze w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 's':
					cout<<"Udalo Ci sie zamowic bluze w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'm':
					cout<<"Udalo Ci sie zamowic bluze w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'l':
					cout<<"Udalo Ci sie zamowic bluze w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					case 'xl':
					cout<<"Udalo Ci sie zamowic bluze w rozmiarze "<<rozmiar<<" ! "<<endl;
					break;
					
					default:
						cout<<"Nie mamy takiego rozmiaru"<<endl;
				}
				}
				break;
				
				default:
					cout<<"Nie mamy takiego produktu w sklepie!"<<endl;
	}
	return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 25 listopada 2021 przez Wiciorny Mędrzec (197,420 p.)
Problem jest w tym, że wczytujesz znaki, a xl nie jest znakiem tylko literałem.
https://stackoverflow.com/questions/16388510/evaluate-a-string-with-a-switch-in-c
Literał nie jest pojedynczym znakiem
komentarz 25 listopada 2021 przez Kajetan_ Nowicjusz (140 p.)
No ale chyba stringa nie można używać, kiedy stosuje się instrukcję switch(Tak przynajmniej dowiedziałem się z kursu Pana Mirosława).
komentarz 25 listopada 2021 przez Wiciorny Mędrzec (197,420 p.)
w takim razie co to jest za znak "xl" "xs"? bo ja takiego w aflabecie nie znam, ?
komentarz 25 listopada 2021 przez pionas0407 Gaduła (4,600 p.)

@Kajetan_, jeżeli nie chcesz char to możesz np zrobić sobie słownik jakiś liczb, np 

liczba 1 będzie reprezentowała rozmiar 'XL'

i wtedy instrukcję switch sterować za pomocą tych liczb

komentarz 25 listopada 2021 przez pionas0407 Gaduła (4,600 p.)

https://stackoverflow.com/questions/16388510/evaluate-a-string-with-a-switch-in-c@Kajetan_, jeżeli nie chcesz char to możesz np zrobić sobie słownik jakiś liczb, np 

liczba 1 będzie reprezentowała rozmiar 'XL'

i wtedy instrukcję switch sterować za pomocą tych liczb

https://stackoverflow.com/questions/16388510/evaluate-a-string-with-a-switch-in-c

1
komentarz 25 listopada 2021 przez Wiciorny Mędrzec (197,420 p.)

dokładnie tak jak kolega pisze 

Intrukcja switch wykorzystuje tylko typy wbudowane (a string tym nie jest). Do tego celu musisz wykorzystać instrukcję if...else.

możesz skorzystać z ENUM albo zrobić to za pomocą if...else.  

unsigned f(string strNapis)
{
    if (strNapis == "cs") return 1;
    if (strNapis == "csg") return 2;
    return 0;
}

 

komentarz 26 listopada 2021 przez mokrowski VIP (146,940 p.)

@Kajetan_, 

No ale chyba stringa nie można używać, kiedy stosuje się instrukcję switch(Tak przynajmniej dowiedziałem się z kursu Pana Mirosława).

Ogólnie, tak. Jednak jeśli masz pewność że stringi będą stałe, w trakcie kompilacji możesz użyć ich jako kluczy do case: https://dev.krzaq.cc/post/switch-on-strings-with-c11/ . Rzecz polega na naliczeniu skrótu do takiego stringa.

Można także traktować string (krótki), jako liczbę 32 lub 64 bitową. Ale to trochę "brudna technika" :)

0 głosów
odpowiedź 25 listopada 2021 przez pionas0407 Gaduła (4,600 p.)

Podobne pytania

0 głosów
1 odpowiedź 32 wizyt
+1 głos
3 odpowiedzi 71 wizyt
pytanie zadane 13 stycznia 2021 w C i C++ przez Adamek185wp Obywatel (1,280 p.)
0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez thekibi27 Bywalec (2,110 p.)

86,483 zapytań

135,239 odpowiedzi

300,480 komentarzy

57,230 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...