Strona 1 z 1

instrukcja switch

: 29 stycznia 2008, 09:43
autor: migdas
Witam! Jestem pozacztkujacym programistą, zacząłem od C++ i mam problem a mianowicie:

Kod: Zaznacz cały

#include <iostream>


using namespace std;
int main()

{
char odp ;
	cout << "Lubisz lody? ";
	cin >> odp ;
	switch(odp)
	{
		case 'Tak':
			cout << "Tak? A jaki smak? ";
			break;
		case 'Nie':
			cout << "Nie? A czemu? ";	
		    break;
		default:
			cout << "Co? Powtorz!\n";
			break;
	}
return 0;
}	
Kdy wpisze "Tak" lub "Nie" program przeskakuje do "default:" i konczy prace, czemu?

: 29 stycznia 2008, 10:17
autor: salmon
Bo char to jest znak, jeden znak. 'Tak' to są trzy znaki, żeby działało powinno to wyglądać tak:

Kod: Zaznacz cały

using namespace std;
int main()

{
char odp ;
    cout << "Lubisz lody? ";
    cin >> odp ;
    switch(odp)
    {
        case 'T':
            cout << "Tak? A jaki smak? ";
            break;
        case 'N':
            cout << "Nie? A czemu? ";   
            break;
        default:
            cout << "Co? Powtorz!\n";
            break;
    }
return 0;
}   
Po za tym przy kompilacji powinieneś dostać jakiś Warning, który wszystko wyjaśnia(a przynajmniej troche :) )

: 29 stycznia 2008, 11:26
autor: Calasilyar
Nie lepiej to wrzucić do jakiejś małej tablicy, a nie rozróżniać po pierwszej literce? Myślę, że to byłoby bliższe zamysłu autora tematu.

: 29 stycznia 2008, 12:38
autor: salmon
a switch działa na tablicach? Jak już, to się stringa używa i wrzuca do if-a.

: 30 stycznia 2008, 17:59
autor: Immortal
Jak chcesz żeby czytał tak i nie to użyj stringów :

Kod: Zaznacz cały

#include <iostream>
#include <string>

using namespace std;
int main()

{
string odp ;
    cout << "Lubisz lody? ";
    cin >> odp ;
    switch(odp)
    {
        case "Tak":
            cout << "Tak? A jaki smak? ";
            break;
        case "Nie":
            cout << "Nie? A czemu? ";   
            break;
        default:
            cout << "Co? Powtorz!\n";
            break;
    }
return 0;
}   
EDIT: Zauważyłem teraz że chciałbyś wczytywać dopóki użytownik nie wpisze tak albo nie :) Wnioskuje to po osatniej opcji. Jeśli tak to wypadałoby zrobić coś takiego:

Kod: Zaznacz cały

cin >> odp;
while (odp!="Tak"  && odp!="Nie")
{
    cout << "Nie rozumiem. Wpisz jeszcze raz : ";
   cin >> odp;
}
//dopiero tutaj case
Btw
Program oczywiście nmie zareaguje na "nie" wpisane małymi literami

: 30 stycznia 2008, 18:14
autor: salmon
[quote="Immortal"]#include <iostream>
#include <string>

using namespace std]Kompilowałeś to chociaż?

: 30 stycznia 2008, 23:41
autor: Immortal
salmon pisze:Kompilowałeś to chociaż?
Nie kompilowałem... Naprawde sorry za wprowadzenie w błąd switch przecież nie obsługuje stringów... To by trzeba na ifach zrobić...