Lakouz
Lakouz

Reputation: 13

Program crashing, can't explain why?

    #include <stdio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <string.h>
    int compare(char word[], char mystery[])
    {
        int i=0;int bool=1;
        while((i<=20)&&(bool==1))
        {
            if (word[i]==mystery[i])
                i++;
            else
                bool=0;
        }
        return bool;
    }
    char readCharacter()
    {
        char character = 0;

        character = getchar();
        character = toupper(character);
        while (getchar() != '\n') ;
        return character;
    }
    void readString(char *word,char *mystery)
{
    int i=0;
    printf("Enter the word to guess : ");
    scanf("%s",word);
    while(*((word)+(i)) != '\0')
    {
        *((word)+(i))= toupper(*(word+i));
        *((mystery)+(i))='*';
        i++;
    }
    *(mystery+i)='\0';
}
void process(char *word,char *mystery,char letter,int *change)
{
    int i=0;
    while (*((word)+(i))!= '\0')
    {
        if (*((word)+(i))==letter)
        {
            *((mystery)+(i))=letter;
            *change=1;
        }
        i++;

    }

}
    void test(char *word,char *mystery, int triesleft)
    {
        if (*mystery!=*word)
            {
                printf("The mystery word is : %s",*mystery);
                printf("\n You have %d tries left.", triesleft);
            }
         else
         {
              printf("You won !");
         }
    }
    int main()
    {
        int triesleft = 10; int change=0;
        char word[20]; char mystery[20];char letter;
        readString(&word,&mystery);
        while((compare(word,mystery)==0) && (triesleft>0))
        {
            change=0;
            printf("Enter the letter :");
            letter=readCharacter();
            process(&word,&mystery,letter,&change);
            if ((change)==1)
                triesleft--;
            test(&word,&mystery,triesleft);
        }
        if (triesleft>0)
            return 0;
        printf("You lost.");
        return 1;

    }

I'm a beginner in C and I wanted to code a simple Hangman game in C and it compiled fine but it seems to crash after entering the first letter and I can't find a solution ! I don't know what may be the cause but I had a lot of trouble using strings in C, as they don't exist maybe it was a bad manipulation of that I don't know :/

Upvotes: 0

Views: 101

Answers (3)

Serge Ballesta
Serge Ballesta

Reputation: 148900

You first call to readString is enough to crash the program.

word and mystery are arrays, so &word is a char ** not a char *. You should use

readString(word, mystery);

But compiler should have issue a warning on that. Warning are not there to distract beginners to to denote possible (probable if you do not understand the warning) mistakes.

There are probably other problems later ...

Upvotes: 1

Eric
Eric

Reputation: 19863

You cannot declare a variable named bool as it is a type. In C, it is not actually defined for all compilers as bool is not part of the standard but some compilers and some platform will define it anyway

Upvotes: 0

Hassan Ahmed
Hassan Ahmed

Reputation: 405

In the readString() function, you should use '\0' instead of NULL, as C strings are ended with this character.

Upvotes: 0

Related Questions