• 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
58 wizyt
pytanie zadane 6 dni temu w C i C++ przez Kajetan_ Nowicjusz (120 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ź 6 dni temu przez Wiciorny Mędrzec (185,970 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 6 dni temu przez Kajetan_ Nowicjusz (120 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 6 dni temu przez Wiciorny Mędrzec (185,970 p.)
w takim razie co to jest za znak "xl" "xs"? bo ja takiego w aflabecie nie znam, ?
komentarz 6 dni temu przez pionas0407 Gaduła (4,280 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 6 dni temu przez pionas0407 Gaduła (4,280 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 6 dni temu przez Wiciorny Mędrzec (185,970 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 5 dni temu przez mokrowski VIP (146,440 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ź 6 dni temu przez pionas0407 Gaduła (4,280 p.)

Podobne pytania

+1 głos
3 odpowiedzi 68 wizyt
pytanie zadane 13 stycznia w C i C++ przez Adamek185wp Obywatel (1,280 p.)
0 głosów
1 odpowiedź 234 wizyt
pytanie zadane 27 stycznia 2019 w C i C++ przez thekibi27 Bywalec (2,110 p.)
0 głosów
2 odpowiedzi 1,435 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez Drax658 Nowicjusz (120 p.)

85,774 zapytań

134,555 odpowiedzi

298,695 komentarzy

56,666 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 64p. - nidomika
  2. 62p. - ScriptyChris
  3. 60p. - Whistleroosh
  4. 57p. - adrian17
  5. 55p. - CC PL
  6. 55p. - B4mbus
  7. 53p. - Klaudia
  8. 50p. - WhiskeyTaster
  9. 47p. - rucin93
  10. 45p. - tokox
  11. 44p. - Adrian Rębisz
  12. 43p. - Michał Tartanus
  13. 41p. - Jarosław Roszyk
  14. 38p. - Argeento
  15. 18p. - Marcin Harasimowicz
Szczegóły i pełne wyniki

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.

...