GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Valor do array de char "some"


#1

Código: https://hastebin.com/puwomavipi.cpp

Eu estou fazendo um jogo da velha em C, mas estou tendo um problema.
Guardo os nomes dos jogadores em 2 arrays de char, para mostrar a mensagem “É a sua vez, %s!”.
O problema é que após passar pela linha 56, na próxima vez que imprimo o nome desse jogador, sai em branco. Ex.: “É a sua vez, !”.

Se eu comento a linha 56, o problema some.

A saída do terminal: https://m.imgur.com/a/DsOFwjs

OBS.: ESSE CÓDIGO ESTÁ INCOMPLETO, ESTOU CIENTE DE QUE NÃO ESTÁ MUDANDO PARA O PRÓXIMO JOGADOR.


#2

Boa Tarde.

Eu testei esse código e a resposta dele é a seguinte:

O valor não está sumindo, o que está acontecendo é que não está fazendo a alteração de um nome para outro pois o seu a lógica do IF está errada.

Para corrigir esse problema de alternância dos nomes você pode fazer o IF assim:

 if (proximo == 1) {
            strcpy(proximonome, player1);
            proximo =0;
        } else {
            strcpy(proximonome, player2);
            proximo = 1;
        }

#3

Opa.
Então, o problema não é no if. Eu só não postei o código completo.
Só postei a parte onde dá o problema aqui.

O que pode estar fazendo sumir aqui, mas aí não?


#4

Realmente não sei dizer :confused:


#5

O resultado é esse: https://imgur.com/a/DsOFwjs


#6

Se fizer um depuração (mesmo que com a mente) nota-se que é impossível a função printf falhar na impressão.

puwomavipi.cpp

int proximo = 1;
int counter = 0;
while (1) {
    char proximonome[20];
    imprimirtabela(tabela);
    if (proximo) {
        strcpy(proximonome, player1);
    } else {
        strcpy(proximonome, player2);
    }
    printf("É sua vez, %s!\n", proximonome);

    char posicaoescolhida[2];
    pegarposicaoescolhida(posicaoescolhida);
    printf("\nEscolha: %s\n", posicaoescolhida);

    counter--;
    if (counter == -20) {
        break;
    }
}

a variável proximo para toda vida da iteração é igual a 1, então vai está sempre copiando e imprimindo a mesma condição. Qualquer coisa diferente disso é um absurdo. Pois só resta a alternativa de que o erro é das funções na biblioteca :joy:. Eu não consigo pensar em mais nada.

Para essa condição de controle eu proponho a seguinte substituição de código.

int  counter= 0;
char posicaoescolhida []= { [2]= '\0' };
while((-20) <-- counter) {
    imprimirtabela(tabela);
    printf("É sua vez, %s! \n\n", (1 & counter) ? player1 : player2);

    pegarposicaoescolhida(posicaoescolhida);
    printf("Escolha: %s \n", posicaoescolhida);
}

Obrigado.


#7

A solução:
Linha 55: posicaoescolhida[3];

Aparentemente, estava faltando espaço para o NUL.