instrukcja switch

Potrzebujesz pomocy z C, C++, perl, python, itp.
migdas
Posty: 11
Rejestracja: 08 stycznia 2008, 19:51

instrukcja switch

Post 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?
salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post 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 :) )
Calasilyar
Posty: 26
Rejestracja: 17 października 2007, 14:50

Post 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.
salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post autor: salmon »

a switch działa na tablicach? Jak już, to się stringa używa i wrzuca do if-a.
Immortal
Posty: 31
Rejestracja: 11 grudnia 2007, 12:15
Lokalizacja: Kraków

Post 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
salmon
Beginner
Posty: 296
Rejestracja: 12 października 2007, 23:28
Lokalizacja: Gliwice/Bielsko-Biała

Post autor: salmon »

[quote="Immortal"]#include <iostream>
#include <string>

using namespace std]Kompilowałeś to chociaż?
Immortal
Posty: 31
Rejestracja: 11 grudnia 2007, 12:15
Lokalizacja: Kraków

Post 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ć...
ODPOWIEDZ