C 代码 - 猜谜游戏 - 函数问题

标签 c pointers

好吧,我已经看了几个小时了,可能只是因为已经晚了,但我已经脑残了。所以代码应该完成以下任务:

  1. 显示说明
  2. 询问用户要玩的游戏数量
  3. 对于每场比赛 A。从文件中获取一封信 b.玩一场游戏 我。虽然仍有猜测 二.从玩家那里得到猜测 三.将猜测与文件中的字母进行比较 四.如果猜测正确,返回1 v. 否则增加计数器 六.如果 5 次猜测错误,则返回 0 C。检查输赢

这是我到目前为止的代码,有什么想法如何让这个东西正常运行吗?:

#define _CRT_SECURE_NO_WARNINGS
#define MAXGUESSES 5
#include <stdio.h>


//Pre-Processor Directives

void gameRules();
//Game Instructions

int singleGame(char fileLetter);
//Checks guesses, returns 0 after 5 incorrect attempts

char retrieveGuess();
//Prompts user for guess and returns guess
//Called from inside singleGame function

int guessedIt(char answer, char inputLetter);
//Lets user know if answer comes before or after their guess.
//Returns 1 if answer is correct, and 0 for incorrect.
//Called from inside singleGame function.




int main()
{
    char fileLetter = 'a';
    FILE* filePtr;
    int numOfGames = 0;
    int counter = 0;
    //run it

//Rules of Game
gameRules();

//File pointer that opens the file, "r" stands for reading the file
filePtr = fopen("lettersin.txt", "r");

/* File checking if-else

if (filePtr == NULL)
{
    printf("I don't exist");
}
else
{
    printf("I'm alive");
}
*/  

printf("How many games would you like to play? (Pick from 1-4)\n");
scanf("%d", &numOfGames);

for (counter = 0; counter < numOfGames; counter++)
{
    //Pulls a letter from the file and writes it to variable "fileLetter"
    //Note to self: make sure to include "filePtr" so fscanf knows where to pull from
    fscanf(filePtr, " %c", &fileLetter);
    singleGame(fileLetter);
}

//Closes file, not necessary now, but good for later on in bigger programs that may need more files
fclose(filePtr);
return 0;
}

//Game rules function
void gameRules()
{
printf("Welcome to the Letter Guessing Game\n");
printf("You will enter the number of games you want to play (1-4 games).\n");
printf("You have 5 chances to guess each letter.\n");
printf("Let's begin:\n");
}

//Single Game Function
int singleGame(char fileLetter)
{
int numGuesses = 0;

while (numGuesses < MAXGUESSES)
{
    retrieveGuess();
    numGuesses = numGuesses + 1;
}

return 0;
}

//Guess retrieval function
char retrieveGuess()
{
char inputLetter;
printf("What is your guess? (Lowercase letters only, please)\n");
scanf(" %c", &inputLetter);
int guessedIt(char fileLetter, char inputLetter);
}

//Correct, or not, function
int guessedIt(char fileLetter, char inputLetter)
{
if (fileLetter == inputLetter)
{
    printf("You guessed it!\n");
    return '1';
}

else if (inputLetter < fileLetter)
{
    printf("The letter comes after your guessed letter.\n");
    return '0';
}

else
{
    printf("The letter comes before your guessed letter.\n");
    return '0';
}
}

最佳答案

一些事情:

//Single Game Function
int singleGame(char fileLetter)
{
    int numGuesses = 0;

    while (numGuesses < MAXGUESSES)
    {
        retrieveGuess();
        numGuesses = numGuesses + 1;
        // You should return 1 here if the guess is right, no?
        // Something like:
        // char guessedChar = retrieveGuess();
        // place call for function guessedIt here and if it
        // is 1 return the result (if it's 0, don't return, let it keep looping)
    }

    return 0;
}

这个函数:

//Guess retrieval function
char retrieveGuess()
{
char inputLetter;
printf("What is your guess? (Lowercase letters only, please)\n");
scanf(" %c", &inputLetter);
int guessedIt(char fileLetter, char inputLetter);
}

没有返回任何东西。对于定义为返回某些内容的每个函数,您都需要一个 return 语句。另外,我认为最后一条语句甚至没有意义,只需返回 inputLetter

这个函数:

//Correct, or not, function
int guessedIt(char fileLetter, char inputLetter)
{
    if (fileLetter == inputLetter)
    {
        printf("You guessed it!\n");
        return '1';
    }

    else if (inputLetter < fileLetter)
    {
        printf("The letter comes after your guessed letter.\n");
        return '0';
    }

    else
    {
        printf("The letter comes before your guessed letter.\n");
        return '0';
    }
}

返回一个 char ('1'/'0'),即使它声明返回一个 int。您想要编写return 1;/return 0;。你应该把它放在我发表评论的地方

关于C 代码 - 猜谜游戏 - 函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32794026/

相关文章:

c - 如何使用函数填充结构中的值?

c - 如何在不丢失属性的情况下声明先前在包含的库中声明的变量?

c - 在 C 语言中使用 rand()

C:将 char* 附加到 char**

c++ - 将数据复制到类的另一个成员时,类的成员指针会被丢弃

c - 对 switch 语句使用不同的语法时,优化是否有任何可能的变化?

c - 如何在C中执行终端命令

CFDataCreateWithBytesNoCopy() 不能与 "const char var[xx]"一起使用,但可以与 malloc 一起使用吗?

c++ - 为什么递增指针会给出随机数而不是内存地址?

c++ - 使用者线程中的函数无法访问内存位置