2013-10-09 44 views
3

請幫忙!我無法生成我的程序的輸出。這是條件: 構建一個程序,如果購買的襯衫是XL並且價格大於500,則可以給予100比索的折扣;和50個比索折扣,如果買了襯衫是L和價格高於600Switch-Statement C++中的字符

#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; 

}

的程序的輸出:

Input price: 500 
Input size: XL 

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

P.S.如何刪除程序中的警告(多字符字符常量)? 在此先感謝!

+0

爲什麼不把規模枚舉並就切換? –

回答

0

您已將s聲明爲整數,但試圖將其用作字符和字符數組。您應該聲明它爲char s;,然後將其始終用作單個字符 - 這意味着您無法檢查XL。但是,您可以在交換機上檢查X

如果您絕對必須檢查XL,那麼您需要使用字符數組或std::string,儘管switch語句只能與單個字符一起使用,所以您可能必須嵌套開關以檢查多個字符或者只是使用一系列if (strncmp(...)...)調用。

3

如果大小不止一個字符,那麼您需要用一個字符串來表示它。你不能switch上的繩子,所以你必須使用if..else..else..對付值:

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

如果它是一個單一字符,那麼你可以使用charint)來表示即:

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

但是對於多個字符,你需要一個字符串。

1

switch聲明可以在C++中處理intchar。數據類型只能容納一個字母。因此,如果你只輸入一個字母(X)爲XL尺寸將被罰款......

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

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