"strcpy" behaving strangely depending on how it is placed in the "if"

0

What's going on here?

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

void escolha_simb(char *jog1, char *jog2)   //** escolhe quem vai ser x ou o
{
        char esc;

        while (1) {
                printf("\njogador 1, escolha X ou O \n");
                fflush(stdin);
                scanf("%c",&esc);
                if (esc == 'x')
                {
                        strcpy(jog2,"O");
                        strcpy(jog1,"X");

                        break;
                }
                else if (esc == 'o')
                {
                        strcpy(jog2,"X");
                        strcpy(jog1,"O");

                        break;
                }
        }
}

int main(int argc, char const *argv[]) {
        char jog1=0,jog2=0;
        printf("jog1: %c jog2: %c",jog1,jog2 );
        escolha_simb(&jog1,&jog2);
        printf("depois\njog1: %c jog2: %c",jog1,jog2 );
        return 0;
}

Output, if you choose X:

jog1:   jog2:
jogador 1, escolha X ou O
x
depois
jog1: X jog2: O

but if you reverse the strcpy() :

 if (esc == 'x')
                {
                        strcpy(jog1,"X");
                        strcpy(jog2,"O");


                        break;
                }
                else if (esc == 'o')
                {
                        strcpy(jog1,"O");
                        strcpy(jog2,"X");


                        break;
                }

output, if you choose X:

jog1:   jog2:
jogador 1, escolha X ou O
x
depois
jog1:   jog2: O

Why does jog1 get null?

    
asked by anonymous 26.11.2018 / 21:35

1 answer

0

You are mixing char with string , they are different things. When using char you should neither use strcpy() , nor assign using double quotes that refer to strings . It will not always give a problem, but the coded form is not correct, so it's more correct:

#include <stdio.h>

void escolha_simb(char *jog1, char *jog2) {
    while (1) {
        printf("\njogador 1, escolha X ou O \n");
        char esc;
        scanf("%c", &esc);
        if (esc == 'x') {
            *jog2 = 'X';
            *jog1 = 'O';
            break;
        }
        else if (esc == 'o') {
            *jog2 = 'O';
            *jog1 = 'X';
            break;
        }
    }
}

int main() {
    char jog1 = 0, jog2 = 0;
    printf("jog1: %c jog2: %c", jog1, jog2);
    escolha_simb(&jog1, &jog2);
    printf("depois\njog1: %c jog2: %c", jog1, jog2);
}

See running on ideone . And no Coding Ground . Also put it in GitHub for future reference .

You probably have more performative ways of doing this, but you would need to test.

    
26.11.2018 / 22:12