error C2046: illegal case [closed]
Questions concerning problems with code you've written must describe the specific problem — and include valid code to reproduce it — in the question itself. See SSCCE.org for guidance.
Closed 9 years ago.
Improve this questionI have been looking for quite some time for an answer to this, and I haven't found one so i decided to ask. For some reason I'm getting an illegal case statement error. This is for my final project and my teacher can't even find the error. It was working fine before, but after it put in something then took it out, the case statement stopped working...even though the code's the same...
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;
开发者_StackOverflow中文版 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';
}
I apologize for such a long code but I have no idea where the error is. Here is the error in the compiler:
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)
You have too many closing braces, specifically the one immediately preceding break; case '0':
.
This is closing off your switch
statement which is why it's complaining about the naked case
.
Having said that, the deletion of that extraneous brace will cause another problem since you then don't close off the switch statement at all. Immediately after the case '0'
block, you close off the do
loop without first closing off the switch
. You'll need to put another }
in there.
Might I suggest that you refactor your code to make it a little easier to read? In my opinion, case
blocks should have a small number of lines in them (e.g., 10). Any more than that, or if there's a lot of indent levels, and it should just call a function to do the grunt-work.
That would have probably made your error more apparent since, if it didn't avoid it altogether, it would have at least moved it to the case '9'
function.
You've got an extra closing brace in 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
}
You should really work on your indentation, as it improves readability for you and others. Your problem is that case '0':
is outside of the switch
statement (with proper indentation that would have jumped at you).
精彩评论