C中的字母游戏早期结束

时间:2016-09-30 18:46:26

标签: c

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#define MAXGUESSES 5
                                                            // function declarations
void GameRules();
int SingleGame(char file_letter);
char RetrieveGuess();
int GuessedIt(char answer, char input_letter);
int main()
{
    int PlayGames = 0,                                      //Variable Declarations
        i = 0;                                              //Variable Declarations
    char correctanswer;                                     //Variable Declarations

    GameRules();                                            //Call of GameRules Function
    FILE *fp;                                               //Opening File
    fp = fopen("lettersin", "r");                           //Opening File for Reading
    printf("How many games would you like to play?1-4:");   //Prompting for Number of Games to Play
    scanf("&d", &PlayGames);                                //Scanning number of games wished to be played, storing it in PlayGames 
    for (i = 0; i<PlayGames; i++)                           //For Loop that lasts until i=playgames
    {
        fscanf(fp, "%c", &correctanswer);                   //function to scan 1 letter from lettersin.txt
        int SingleGame(correctanswer);                      //Play one game
        if (SingleGame == 1)                                //if Single Game returns 1, you win
        {
            printf("You Win!");
        }
        else if (SingleGame == 0)                           //If Single Game returns 0, you lose
        {
            printf("You Lose");
        }
    }
    fclose(fp);                                             //Closes the File
    return 0;
}

void GameRules()                                            //Function that prints the Rules
{
    printf("This is the Letter Game. The goal is to guess the correct letter within 5 attempts. After each guess you will be told whether the letter you attempted to guess comes before or after the letter actually guessed.\n");
}

char RetrieveGuess()                                        //Function to prompt for a guess, then store the guess in an integer that is returned by the function when called
{
    char a;
    printf("Enter a letter");
    scanf("%c", &a);
    return a;
}

int GuessedIt(char answer, char input_letter)               //Function that returns 1 when the answer is correct, or suggests where the correct answer is if the guess is incorrect
{
    if (answer == input_letter)                             //if the guess is the same as the answer, return 1
    { 
        return 1; 
    }
    else if (answer > input_letter)                         //if the guess is incorrect, suggest on how to improve and return 0
    { 
        printf("the correct letter comes before your guess"); return 0; 
    }
    else 
    {
        printf("the correct letter comes after your guess"); return 0;
    }

}


int SingleGame(char file_letter)                            //Function to play 1 game
{
    int numGuesses = 0;                                     //Variable Declarations
    char b;
    while (numGuesses < MAXGUESSES)                         //While Loop that repeats until numguesses=maxguesses
    {
        b=RetrieveGuess();                                  //sets b equal to the value RetrieveGuess returns
        GuessedIt(file_letter, b);                          //uses b and whichever value is entered into SingleGame to determine wheter the answer is correct
        if (GuessedIt == 1)                                 //If function that returns 1 if the guess is correct and ends the function, otherwise it increments numguesses
        {
            return 1;
            numGuesses = 6;
        }
        else numGuesses = numGuesses++;                     //increments numguesses to end loop after 5 guesses

    }
    if (numGuesses == 5)                                    //returns 0 if the letter is not guessed within 5 tries
    {
        return 0;
    }

}

当我尝试运行我的代码时,我没有收到任何错误消息,但是在输入我想玩的游戏数量后,我的代码结束了。没有错误,除了“无法找到或打开PDB文件”,我正在使用Microsoft Visual Studio 2013 Express

3 个答案:

答案 0 :(得分:0)

它是scanf("%d", &PlayGames);(将&amp; d更改为%d)

答案 1 :(得分:0)

在main函数中你使用单游戏函数名作为变量...它应该抛出一个错误,因为你没有声明任何这样的变量..而不是放置函数调用 if和else条件中的单游戏(correctanswer)。

答案 2 :(得分:0)

您的代码根本不应该编译。我很惊讶你声称它确实如此。您正在使用函数,就像它们是变量一样。

但无论如何,在解决了所有这些问题之后,代码确实会过早地结束。原因是scanf("&d", &PlayGames);中的拼写错误。 int格式说明符应该是%d而不是&d

由于这个拼写错误,PlayGames的值永远不会设置并保持为0。