简体   繁体   中英

My c program keeps crashing and I do not know why

I am writing a program like hangman in c and I am trying to run it.The problem is that it's working fine until I give it a letter to quess the word but then it crashes with -1073741819 (0xC0000005). Can someone help me solve this, I think its something really small that I cant see. Thank you for helping me!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void Rules(void);
void maskWord (char starword[], int size);
int playRound(char starword[], char answer[]);
void updateStarWord(char starword[], char answer[], char userguess);
int occurancesInWord(char userguess, char answer[]);

int c=0;
char answer[128];
int N;

int main()
{
    int ch,size;
    char starword[1000];
    do
    {
        printf("---Welcome to Hangman!---\n");
        printf("1.Start Game\n2.Instructions\n3.Exit\n");
        scanf("%d",&ch);
        if(ch>0&& ch<4)
        {
            switch(ch)
            {
                case 1:
                    maskWord(starword,size);break;
                case 2:
                    Rules();break;
            }
        }
        else
            system("cls");
    }
    while(ch!=3);
    return 0;
}

void Rules(void)
{
    do
    {
        do
        {
            printf("\nThe word to guess is represented by a row of dashes representing each letter of the word.");
            printf("\nRules may permit or forbid proper nouns, such as names, places, brands, or slang.");
            printf("\nIf the guessing player suggests a letter which occurs in the word, the other player writes it in all its correct positions.");
            printf("\nIf the suggested letter does not occur in the word, the other player draws one element of a hanged stick figure as a tally mark.\n");
        }
        while(getchar()!='\n');
    }
    while(getchar()!='\n');
}

void maskWord (char starword[], int size)
{
    printf("Enter word to guess: ");
    fflush(stdout);
    scanf(" %s", answer);
    int N = strlen(answer);
    int mask[N];
    for (int i=0; i < N; ++i)
    {
        mask[i] = 0;
    }
    playRound(mask,N);
}

int playRound(char starword[], char answer[])
{
    // Loop over each round of guessing
    int gameover = 0;
    while (! gameover)
    {
        // Print word with *s for unguessed letters
        printf("The word is : ");
        for(int j=0; j < answer; ++j)
        {
            if (starword[j])
            {
                printf("%c", answer[j]);
            }
            else
            {
                printf("*");
            }
        }
        printf("\n");
        // Get player's next guess
        char guess;
        printf("\nGive a letter: ");
        fflush(stdout);
        scanf(" %c", &guess);
        updateStarWord(starword,answer,guess);
    }

}

void updateStarWord(char starword[], char answer[], char userguess)
{
    // Mark true all mask positions corresponding to guess
    int k;
    for(k=0; k < answer; ++k)
    {
        if ((answer[k]) ==(userguess))
        {
            starword[k] = 1;
        }
    }
}

Your for loop doesn't make sense because the condition for terminating it is k < answer . You are comparing an integer ( k ) to a pointer ( answer ). The compiler should have warned you about this, so make sure your compiler warnings are turned on and you are paying attention to them. Pointers and integers are different things, and comparing them is almost never what you want to do.

If answer is null-terminated, you could probably replace that condition with answer[k] . Or maybe updateStarWord needs to take an argument that indicates the length of answer , and then the condition would be k < answer_length .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM