我遇到了我的代碼問題。我正在嘗試構建一個遊戲,並且在到達主循環時出現錯誤。我將顯示代碼和我得到的錯誤。while和switch loops的問題
只需做一個小記錄,選擇選項1並玩遊戲時的要點是,遊戲在獲得正確答案後循環播放,並向玩家展示第二個隨機單詞,並一直這樣做,直到玩家寫下'放棄'。
這是代碼:
#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;
}
這是錯誤:
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
但是,爲什麼這是真的? – DutchLearner 2012-02-23 16:13:44
@ user1222107我不知道技術細節,但它與標籤不會創建新塊有關。解決方法是聲明'switch'語句之外的所有變量,或者將它們放在一個'{}'塊中。你可以做'case X:{/ * stuff * /}'這樣的東西,並且在裏面聲明變量。 – 2012-02-23 16:46:58
好的,謝謝。 :) – DutchLearner 2012-02-23 16:54:49