• 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

Object Storage Arubacloud
0 głosów
196 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 Ekspert (269,710 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 Ekspert (269,710 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,620 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,620 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 Ekspert (269,710 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 Mędrzec (155,460 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,620 p.)

Podobne pytania

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

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...