Прототип функции неинициализированная локальная переменная
Я учусь в средней школе, и для одного из моих финальных проектов мое задание включает функциональные прототипы. Я включу код ниже, но ошибка, которая всегда появляется, это "неинициализированная локальная переменная" имя "используется". Я определяю эту переменную в отдельной функции и возвращаю ее, но она не возвращается к int main. Я уверен, что это что-то очевидное, но если бы кто-нибудь мог мне помочь, я был бы очень признателен. Спасибо
// Rock, Paper, Scissors Game
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>
using namespace std;
// Global constants to represent rock,
// paper, or scissors.
const int rock = 1;
const int paper = 2;
const int scissors = 3;
int getComputerChoice(int);
int getUserChoice(char);
void determineWinner(int, int);
int main()
{
int compChoice;
char uChoice;
getComputerChoice(compChoice);
getUserChoice(uChoice);
if (uChoice == 'r' || uChoice == 'p' || uChoice == 's') {
determineWinner(compChoice, uChoice);
getComputerChoice(compChoice);
getUserChoice(uChoice);
}
return 0;
}
// ********************************************************
// The getComputerChoice function returns the computer's *
// game choice. It returns 1 for rock (via the ROCK *
// constant), or 2 for paper (via the PAPER constant), *
// or 3 for scissors (via the SCISSORS constant). *
// ********************************************************
int getComputerChoice(int compChoice) {
// Get the system time so we can use it
// to seed the random number generator.
unsigned seed = time(0);
// Use the seed value to seed the random
// number generator.
srand(seed);
// Generate a random number in the range of 1-3.
compChoice = (1 + rand() % 3);
return compChoice;
}
// ********************************************************
// The getUserChoice function displays a menu allowing *
// the user to select rock, paper, or scissors. The *
// function then returns 1 for rock (via the ROCK *
// constant), or 2 for paper (via the PAPER constant), *
// or 3 for scissors (via the SCISSORS constant). *
// ********************************************************
int getUserChoice(char uChoice) {
cout << "Welcome to rock, paper, scissors. Choose 'r' for rock, 'p' for paper, or 's' for scissors.\n";
if (uChoice == 'r' || uChoice == 'p' || uChoice == 's')
cin >> uChoice;
else
cout << "This is not a valid choice.\n";
return uChoice;
}
// ********************************************************
// The determineWinner function accepts the user's game *
// choice and the computer's game choice as arguments and *
// displays a message indicating the winner. *
// ********************************************************
void determineWinner(int compChoice, char uChoice) {
// Display the choices.
switch (1) {
case 'r':
if (compChoice == 1)
cout << "Both of you picked rock, it's a tie./n";
else if (compChoice == 2)
cout << "You lost, you picked rock and the computer picked paper.\n";
else
cout << "You won! You picked rock and the computer picked scissors.\n";
break;
case 'p':
if (compChoice == 1)
cout << "You won! You picked paper and the computer picked rock.\n";
else if (compChoice == 2)
cout << "Both of you picked paper, it's a tie./n";
else
cout << "You lost, you picked paper and the computer picked scissors.\n";
break;
case 's':
if (compChoice == 1)
cout << "You lost, you picked scissors and the computer picked rock.\n";
else if (compChoice == 2)
cout << "You won! You picked scissors and the computer picked paper.\n";
else
cout << "Both of you picked scissors, it's a tie./n";
break;
default:
cout << "Sorry, something's wrong. Try again.";
}
}
1 ответ
Код, как написано, никогда не будет работать. В main
Вы проходите compChoice
в getComputerChoice
а также uChoice
в getUserChoice
без инициализации одного из них. Код должен быть больше похож на:
int compChoice = getComputerChoice ();
int uChoice = getUserChoice ();
и соответственно измените прототипы функций. Реализация getUserChoice
тоже не правильно, но я оставлю это вам, чтобы разобраться с этим (прочитайте переменную, прежде чем проверять это!). И посмотрите второй комментарий molbdnilo о switch (1), я должен это исправить.
Другие комментаторы правы, вам нужно немного поучаствовать, но опять же, ничто не заменит немного практической работы. Не сдавайтесь и узнайте, как использовать хороший отладчик для пошагового выполнения кода, который даст вам гораздо больше понимания того, что он на самом деле делает (отладчик Visual Studio особенно хорош).