2016-09-30 77 views
0
#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點快速C中的字母遊戲在早期結束

+0

在運行時沒有錯誤消息?但是你*得到(4)編譯器警告,所以請先處理它們。例如:if(SingleGame == 1)'這是一個函數標識符,而不是函數調用。 –

+0

我修正了第一個2,但我找不出什麼警告'C4715:'SingleGame':並非所有控制路徑都返回一個值' –

+0

當if(numGuesses == 5)是false時,不返回任何值。你想要'返回numGuesses!= 5;'?只是猜測;) –

回答

0

這是scanf("%d", &PlayGames);(改由%d的& d)

0

在主函數中你是使用singlegame-函數名稱作爲變量...它應該拋出一個錯誤,因爲你沒有聲明任何這樣的變量..而是將函數調用 單一遊戲(correctanswer)在if和else條件中。

0

你的代碼根本不應該編譯。我很驚訝你聲稱它確實如此。你正在使用函數,就像它們是變量一樣。

但無論如何,在修復所有這些事情之後,代碼確實會過早地結束。原因是scanf("&d", &PlayGames);中的拼寫錯誤。 int格式說明符應爲%d而不是&d

由於這個錯字,PlayGames的值從未設置並保持爲0.