Caracterul în declarația de comutare C++ (Programare, C++, Declarație De Comutare, Caracter, Constante, Ieșire)

Jemar Villareal a intrebat.

Vă rugăm să ajutați! Nu pot produce ieșirea programului meu. Aceasta este condiția: Construiți un program care să ofere o reducere de 100 de pesos dacă tricoul cumpărat este XL și prețul este mai mare de 500; și o reducere de 50 de pesos dacă tricoul cumpărat este L și prețul este mai mare de 600.

#include <iostream>
using namespace std;


int main()
{
    int p;
    int s;

    cout << "Input price: ";
    cin  >> p;
    cout << "Input size: ";
    cin  >> s;

switch (s)
{
case 'XL': case 'xl':
    {
        if (p>500){
            cout << "Total price: " << p-100 << " pesos.";
            break;
        }
        else if ((s=='XL' || s=='xl') && (p<500)){
            cout << "Total price: " << p << " pesos.";
            break;
        }
    }
case 'L': case 'l':
    {
        if (p>600){
            cout << "Total price: " << p-50 << " pesos.";
            break;
        }
        else if ((s=='XL' || s=='xl') && (p<600)){
            cout << "Total price: " << p << " pesos.";
            break;
        }
    }
case 'M': case 'm':
    {
        cout << "Total price: " << p << " pesos.";
        break;
    }
case 'S': case 's':
    {
        cout << "Total price: " << p << " pesos.";
        break;
    }
}

return 0;

}

Rezultatul programului:

Input price: 500
Input size: XL

Process returned 0 (0x0)   execution time : 5.750 s
Press any key to continue.

P.S. Cum pot elimina avertismentul (constanta de mai multe caractere) din programul meu?Mulțumesc anticipat!

Comentarii

  • De ce să nu faceți din mărime un enum și să comutați pe acesta? –  > Por Neil Kirk.
3 răspunsuri
Mike Seymour

Dacă dimensiunea poate fi mai mult de un singur caracter, atunci va trebui să o reprezentați cu un șir de caractere. Nu puteți switch pe un șir de caractere, așa că va trebui să utilizați if..else..else.. pentru a vă ocupa de valoare:

std::string size;
cin >> size;
if (size == "XL") {
    // deal with size XL
} else if (size == "L") {
    // deal with size L
} // and so on

Dacă ar fi un singur caracter, atunci ați putea folosi char (not int) pentru a reprezenta acest lucru:

char size;
cin >> size;
switch (size) {
    case 'L': 
        // deal with size L
        break;
    // and so on
}

dar pentru mai multe caractere, veți avea nevoie de un șir de caractere.

Tun Zarni Kyaw

switch poate gestiona int și char în C++. char tipul de date poate conține doar o singură literă. Astfel, dacă introduceți o singură literă (X) pentru dimensiunea XL va fi în regulă …

cout << "Input size (X/L/M/S): ";
cin  >> s;

switch (s){
    case 'X': case 'x':

pattivacek

Ați declarat s ca un întreg, dar încercați să îl utilizați ca un caracter și matrice de caractere. Probabil că ar trebui să o declarați este char s; și apoi să o folosiți în mod consecvent ca un singur caracter – ceea ce înseamnă că nu puteți verifica pentru XL. Cu toate acestea, ați putea verifica doar pentru X în comutatorul dvs.

Dacă trebuie neapărat să verificați pentru XLatunci va trebui să folosiți fie o matrice de caractere, fie std::string, deși instrucțiunile switch pot fi folosite numai cu caractere unice, așa că este posibil să trebuiască să aninați switch-ul pentru a verifica mai multe caractere sau să folosiți doar o serie de if (strncmp(...)...) apeluri.