错误C2046:非法案例

error C2046: illegal case

本文关键字:案例 非法 C2046 错误      更新时间:2023-10-16

我一直在寻找这个问题的答案,但一直没有找到,所以我决定问。出于某种原因,我收到了一个非法的案件陈述错误。这是我的期末项目,我的老师甚至找不到错误。它以前工作得很好,但在它放入一些东西然后取出后,案件陈述就停止了。。。即使代码是一样的。。。

         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. Progfinal project.cpp(232) : error C2046: illegal case
Error executing cl.exe.
final project.exe - 1 error(s), 0 warning(s)

您有太多的大括号,特别是break; case '0':前面的那个大括号。

这是在结束你的switch语句,这就是为什么它抱怨裸露的case

话虽如此,删除这个无关的大括号将导致另一个问题,因为那时根本无法关闭switch语句。在case '0'块之后,立即关闭do循环,而不首先关闭switch。你需要在那里再放一个}


我可以建议您重构代码,使其更易于阅读吗?在我看来,case块中应该有少量的行(例如,10)。除此之外,或者如果有很多缩进级别,它应该只调用一个函数来完成繁重的工作。

这可能会让你的错误更加明显,因为如果它没有完全避免它,它至少会把它移到case '9'函数中。

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
}

您应该真正处理缩进,因为它可以提高您和其他人的可读性。您的问题是case '0':switch语句之外(如果有适当的缩进,则会跳到您身上)。