|
-
February 23rd, 2012, 09:33 AM
#1
Problems with 'switch' and 'while'
I'm having issues with my code. I am trying to build a game and it somehow gives errors when reaching the main loops. I will show to code and the errors I'm getting.
Just a small note, the point when choosing option 1 and playing the game is that the game loops after the correct answer has been given and presents the player with a second random word, and keeps doing this until the player writes 'quit'.
This is the code:
Code:
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
enum fields {WORD, HINT, NUM_FIELDS};
const int NUM_WORDS = 3;
const string WORDS[NUM_WORDS][NUM_FIELDS] =
{
{"jumble1", "First word."},
{"jumble2", "Second word."},
{"jumble3", "Third word."}
};
srand(static_cast<unsigned int>(time(0)));
int choice = (rand() % NUM_WORDS);
string theWord = WORDS[choice][WORD];
string theHint = WORDS[choice][HINT];
string jumble = theWord;
int length = jumble.size();
for (int i = 0; i < length; ++i)
{
int index1 = (rand() % length);
int index2 = (rand() % length);
char temp = jumble[index1];
jumble[index1] = jumble[index2];
jumble[index2] = temp;
}
int choice;
bool choiceNotMade = true;
while (choiceNotMade)
{
cout << "[1] Play\n";
cout << "[2] Credits\n";
cout << "[3] Quit\n\n";
cout << "Your choice: ";
cin >> choice;
}
switch (choice)
{
case 1:
cout << "Unscramble the letters to make a word.\n";
cout << "Enter 'hint' for a hint.\n";
cout << "Enter 'quit' to quit the game.\n\n";
cout << "The jumble is: " << jumble;
string guess;
cout << "\n\nYour guess: ";
cin >> guess;
while ((guess != theWord) && (guess != "quit"))
{
if (guess == "hint")
{
cout << theHint;
}
else
{
cout << "That's not the right word.";
}
cout << "\n\nYour guess: ";
cin >> guess;
}
if (guess == theWord)
{
cout << "\nYou guessed it!\n";
}
cout << "\nThank you for playing.\n";
system("Pause");
choiceNotMade = false;
break;
case 2:
cout << "\n\nThis game has been made by:\n\n";
choiceNotMade = false;
break;
case 3:
cout << "Program will exit";
exit(1);
default:
cout << "\nYou did not pick a valid option.\n\n";
choiceNotMade = false;
break;
}
return 0;
}
And this is the error:
Code:
word_jumble.cpp: In function `int main()':
word_jumble.cpp:32: error: redeclaration of `int choice'
word_jumble.cpp:17: error: `int choice' previously declared here
word_jumble.cpp:83: error: jump to case label
word_jumble.cpp:53: error: crosses initialization of `std::string guess'
word_jumble.cpp:88: error: jump to case label
word_jumble.cpp:53: error: crosses initialization of `std::string guess'
word_jumble.cpp:92: error: jump to case label
word_jumble.cpp:53: error: crosses initialization of `std::string guess'
word_jumble.cpp:83: warning: destructor needed for `guess'
word_jumble.cpp:83: warning: where case label appears here
word_jumble.cpp:83: warning: (enclose actions of previous case statements requiring destructors in their own scope.)
word_jumble.cpp:88: warning: destructor needed for `guess'
word_jumble.cpp:88: warning: where case label appears here
word_jumble.cpp:92: warning: destructor needed for `guess'
word_jumble.cpp:92: warning: where case label appears here
word_jumble.cpp:100:2: warning: no newline at end of file
make[2]: *** [build/Debug/MinGW-Windows/word_jumble.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
-
February 23rd, 2012, 08:42 PM
#2
Re: Problems with 'switch' and 'while'
1)
int choice is declared twice in the same scope. Rename one or use only one
2)
Labels don't have scope but switch{} does. If you want to declare a variable for a label, use brackets.
case (1)
{
std::string guess
}
Without brackets, there can be a jump over an initialization, and then a destructor call at the end of the switch{} which cannot be allowed. That's why you get the error for this.
Hit the enter key at the end of the file. Some compilers require a newline at the end of the file.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|