2016-09-30 49 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.