2011-06-14 69 views
-2

我一直在尋找相當一段時間來回答這個問題,而且我還沒有找到一個所以我決定問。出於某種原因,我收到了非法的案件陳述錯誤。這是爲了我的最終項目,我的老師甚至找不到錯誤。它以前工作正常,但它把在之後的東西,然後拿出來,case語句停止工作......即使代碼是相同的......錯誤C2046:非法案例

  do //start of do while loop 
{ 
cout << "Welcome to the Sperry Store!" << '\n'; //greeting 

cout << " " << '\n'; 
cout << "1- Men's Authentic Original Seasonal Boat Shoe.. $79.99" << '\n'; 
cout << "2- Men's Authentic Original Suede Boat Shoe..... $64.99" << '\n'; 
cout << "3- Men's Mako 2-Eye Canoe Moc Boat Shoe......... $70.00" << '\n'; 
cout << "4- Men's Charter 2-Eye.......................... $90.00" << '\n'; 
cout << "5- Defender 2-Eye Boat Shoe..................... $65.00" << '\n'; 
cout << "6- Men's Embroidered Mako Short................. $34.99" << '\n'; //user friendly menu 
cout << "7- Men's Figawi Jacket.......................... $99.99" << '\n'; 
cout << "8- Men's Mako Pant.............................. $45.99" << '\n'; 
cout << "9- Check Out " << '\n'; 
cout << "0- Start Over and Erase all current sales information. " << '\n'; 


cout << " " << '\n'; 
cout << "Please select the item you're interested in." << '\n'; 
cout << setprecision (5) << "Your current total is: $" << total << '\n'; //displays running total 
cin >> x; //allows entered value to take user to disired case statement 

switch (x) //creates switch for the case statements 
{ 
case '1': 
    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total1 = (amount * seasonal); 
    total = sub_total1 + total;         //case statements for getting the mula 

    cout << "Your current total is: $" << total << '\n'; 


    break; //break statemets required to end case 

case '2': 

    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total2 = (amount * original); 
    total = sub_total2 + total; 

    break; 

    case '3': 

    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total3 = (amount * canoe); 
    total = sub_total3 + total; 

    break; 

    case '4': 

    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total4 = (amount * charter); 
    total = sub_total4 + total; 

    break; 

    case '5': 

    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total5 = (amount * defender); 
    total = sub_total5 + total; 

    break; 

    case '6': 

    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total6 = (amount * embroidered); 
    total = sub_total6 + total; 

    break; 

    case '7': 

    cout << "How jackets would you like?" << '\n'; 
    cin >> amount; 

    sub_total7 = (amount * figawi); 
    total = sub_total7 + total; 

    break; 

    case '8': 

    cout << "How many pairs would you like?" << '\n'; 
    cin >> amount; 

    sub_total8 = (amount * mako_pant); 
    total = sub_total8 + total; 


    break; 

case '9': //check out case statement, lets the function end 

    cout << "Welcome to the check out, please finalize your order." << '\n'; 
    tax = total * .0875; //calculate tax 
    cout << setprecision (5) << "Your total plus tax is: $" << (total = total + tax) << '\n'; //display total + tax 
    cout << "Would you like your order to be shipped? (Type 1 for yes and 2 for no)" << '\n'; //allows choice for shipping or not 
    cin >> shipping; 

    if (shipping == '1') //adds a shipping charge                  
    { 
     cout << "There is a flat shipping rate of $9.99" << '\n'; 
     cout << setprecision (5) << "Your new total is: $" << (total + 9.99) << '\n'; 
     cout << "Would you like a Receipt? (Press 1 for yes and 2 for no)" << '\n'; 
     cin >> receipt; 


     if (receipt == '1') 
     { 
      cout << "     " << "Your Receipt" << '\n'; 
cout << "Men's Authentic Original Seasonal Boat Shoe.."<< sub_total1 <<'\n'; 
cout << "Men's Authentic Original Suede Boat Shoe....."<< sub_total2 <<'\n'; 
cout << "Men's Mako 2-Eye Canoe Moc Boat Shoe........."<< sub_total3 <<'\n'; 
cout << "Men's Charter 2-Eye.........................."<< sub_total4 <<'\n'; //receipit 
cout << "Defender 2-Eye Boat Shoe....................."<< sub_total5 <<'\n'; 
cout << "Men's Embroidered Mako Short................."<< sub_total6 <<'\n'; 
cout << "Men's Figawi Jacket.........................."<< sub_total7 <<'\n'; 
cout << "Men's Mako Pant.............................."<< sub_total8 <<'\n'; 
    cout << "If you have any questions please call (781)-452-2079."<< '\n'; 
    cout << "Thank you for shopping at The Sperry Store!" << '\n'; 
     } 
     if (receipt == '2') 
     { 
      cout << "If you have any questions please call (781)-452-2079."<< '\n'; 
      cout << "Thank you for shopping at The Sperry Store!" << '\n'; 
     } 


    } 
    if (shipping == '2') //checks out without shipping 
    { 
        cout << "     " << "Your Receipt" << '\n'; 
cout << "Men's Authentic Original Seasonal Boat Shoe.."<< sub_total1 <<'\n'; 
cout << "Men's Authentic Original Suede Boat Shoe....."<< sub_total2 <<'\n'; 
cout << "Men's Mako 2-Eye Canoe Moc Boat Shoe........."<< sub_total3 <<'\n'; 
cout << "Men's Charter 2-Eye.........................."<< sub_total4 <<'\n'; //receipit 
cout << "Defender 2-Eye Boat Shoe....................."<< sub_total5 <<'\n'; 
cout << "Men's Embroidered Mako Short................."<< sub_total6 <<'\n'; 
cout << "Men's Figawi Jacket.........................."<< sub_total7 <<'\n'; 
cout << "Men's Mako Pant.............................."<< sub_total8 <<'\n'; 
    cout << "If you have any questions please call (781)-452-2079."<< '\n'; 
    cout << "Thank you for shopping at The Sperry Store!" << '\n'; 
     } 
     if (receipt == '2') 
     { 
      cout << "If you have any questions please call (781)-452-2079."<< '\n'; 
      cout << "Thank you for shopping at The Sperry Store!" << '\n'; 
     } 

     no_ship(); //declares function 

    } 

    break; 

    case '0': //restart order statement 

    cout << "Are you sure you would like to erase all data (This choice is non-reversable)?" << '\n'; 
    cout << "Press 1 for yes and 2 for no" << '\n'; 
    cin >> erase; 

    if (erase == '1') //erases the data 
    { 
     shipping = 0; 
     erase = 0; 
     amount = 0; 
     total = 0;   
     tax = 0; 
     x = 0; 
     sub_total1 = 0; 
     sub_total2 = 0; 
     sub_total3 = 0; 
     sub_total4 = 0; 
     sub_total5 = 0; 
     sub_total6 = 0; 
     sub_total7 = 0; 
     sub_total8 = 0; 
    } 
    if (erase == '2') //returns to menu 
    { 
     cout << setprecision (4) << "Your current total is: $ " << total << '\n'; //returns user to the menu without erasing order 
    } 

    break; 

    system("command/ccls"); 


} 



while (x != '9'); //end of while loop (when x does not = 9) 


return 0; 
} 

void no_ship() // displays the no_ship function data 
{ 
    cout << "Your item will be ready in 1-2 business days." << '\n'; 
    cout << "If you have any questions please call (781)-452-2079."<< '\n'; 
    cout << "Thank you for shopping at The Sperry Store!" << '\n'; 
} 

我這麼長的代碼,但我道歉不知道錯誤在哪裏。以下是編譯器錯誤:

Compiling... 
final project.cpp 
H:\Comp. Prog\final project.cpp(232) : error C2046: illegal case 
Error executing cl.exe. 
final project.exe - 1 error(s), 0 warning(s) 
+2

專業提示 - 切勿將複雜的代碼放入交換機的外殼內。一個案例最多應由幾行代碼組成。使用功能,或使用if-ladder。 – 2011-06-14 13:06:33

+0

哪一行是232行?錯誤消息中的(232)告訴你錯誤在哪裏。 – 2011-06-14 13:07:11

+0

當您遇到無法找到的編譯問題時,請嘗試縮小程序的副本(直到找到問題爲止)的大小。最終你會發現問題,或者你有一個5行的程序,你可以向你的老師展示。有關此技術的更多信息,請參閱http://sscce.org。 – 2011-06-14 14:22:42

回答

0

你真的應該對你的壓痕做功,因爲它提高可讀性爲您和他人。您的問題是case '0':不在switch聲明之外(並且有適當的縮進會引起你的注意)。

+0

非常感謝。我會盡力去解決它。有沒有我可以看的教程? – Matt 2011-06-14 13:18:27

+1

@Matt:這裏給你一個提示:永遠不要把大括號內的代碼縮進大括號內。如果線條太長,請打破線條。更好的是,將代碼分解爲函數,正如Neil在他的評論中所建議的那樣。 – 2011-06-14 13:34:07

3

你有太多的結束括號,特別是將此前break; case '0':

這是關閉你的switch聲明,這就是爲什麼它抱怨裸體case

話雖如此,刪除多餘的括號會導致另一個問題,因爲你根本沒有關閉switch語句。緊接在case '0'塊之後,您可以關閉do循環,而不必先關閉switch。您需要在其中放置另一個}


可能我建議你重構你的代碼,使它更容易閱讀?在我看來,case塊應該有少量的行(例如10)。除此之外,或者如果有很多縮進級別,並且它應該只是調用一個函數來完成咕嚕聲。

這可能會讓你的錯誤更加明顯,因爲如果它完全避免它,它至少會將它移到case '9'函數。

+0

當它被刪除時,我得到致命的錯誤C1004:找到文件的意外結束。還有兩個人。 – Matt 2011-06-14 13:16:48

+0

然後,在'while(x!='9')之前你需要另一個大括號;' - 查看我的更新。 – paxdiablo 2011-06-14 13:19:25

+0

是的,我的結構是星期,而我經常偏離功能,因爲他們給我的問題... – Matt 2011-06-14 13:24:12

1

你有一個額外的大括號中case '9'

if (shipping == '2') //checks out without shipping 
{ 
    // skipped 
    } // <------- 
    if (receipt == '2') 
    { 
     cout << "If you have any questions please call (781)-452-2079."<< '\n'; 
     cout << "Thank you for shopping at The Sperry Store!" << '\n'; 
    } 

    no_ship(); //declares function 

}