Using functions

1

Good afternoon! I am implementing a game of stone, paper and scissors, where the application of functions occurs, with and without argument and return. I was in doubt after the program to identify the options of the user and the computer, because I could not hit the final result Ex: "Stone kneads scissors" but to cases where I did not choose scissors or stone.

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

    int ler_jogada() {
        int jog_usuario;

        printf("Digite (1) para pedra, (2) para papel, (3) para tesoura: ");
        scanf("%d", & jog_usuario);
        return jog_usuario;
        while (jog_usuario < 1 || jog_usuario > 3) {
            printf("Valor invalido, informe outro!");
            scanf("%d", & jog_usuario);
            fflush(stdin);
        }
        return jog_usuario;
    }

int ler_comp() {
    int jogada_comp;
    srand(time(NULL));
    jogada_comp = 1 + rand() % 4;

    return jogada_comp;
}
void imprime_jog(int jog_usuario, int jogada_comp) {
    switch (jog_usuario) {
        case 1:
            printf("\nVoce escoheu pedra!");
            break;
        case 2:
            printf("\nVoce escolheu papel!");
            break;
        case 3:
            printf("\nVoce escolheu tesoura!");
            break;
    }
    switch (jogada_comp) {
        case 1:
            printf("\nEscolhi pedra!");
            break;
        case 2:
            printf("\nEscolhi papel!");
            break;
        case 3:
            printf("\nEscolhi tesoura!");
            break;
    }
}
int calc_resultado(int jog_usuario, int jogada_comp) {
    if (jog_usuario == 1 && jogada_comp == 2) {
        printf("\nPapel cobre pedra!");
        return 1;
    }
    if (jog_usuario == 1 && jogada_comp == 3) {
        printf("\nPedra amassa tesoura!");
        return 2;
    }
    if (jog_usuario == 2 && jogada_comp == 1) {
        printf("\nPapel cobre pedra!");
        return 2;
    }
    if (jog_usuario == 2 && jogada_comp == 3) {
        printf("\nTesoura corta papel!");
        return 1;
    }
    if (jog_usuario == 3 && jogada_comp == 1) {
        printf("\nPedra amassa tesoura");
        return 1;
    }
    if (jog_usuario == 3 && jogada_comp == 2) {
        printf("\nTesoura corta papel");
        return 2;
    }
    if (jog_usuario == jogada_comp) {
        return 3;
    }
    return 0;
}

int main() {
    int jog_usuario, jogada_comp, x;

    jog_usuario = ler_jogada();

    jogada_comp = ler_comp();

    imprime_jog(jog_usuario, jogada_comp);

    x = calc_resultado(jog_usuario, jogada_comp);


    switch (x) {
        case 1:
            printf("\n\nGanhei! Quem sabe voce ganha na proxima...!");
            break;
        case 2:
            printf("\n\nVoce ganhou!!!Parabens!");
            break;
        case 3:
            printf("\n\nEmpate! Vamos de novo!");
            printf("\n");
            main();
            break;
    }

    return 0;
}
    
asked by anonymous 30.10.2015 / 19:15

2 answers

2

You have multiple ; after if s:

if (jog_usuario == 1 && jogada_comp == 3); {  // remova o ; depois do )
    printf("\nPedra amassa tesoura!");
    return 2;
}
// há também outras instâncias desse erro no código

What is happening is that if is running, but there is a empty statement after it (the ; ). After that, { opens a block that is always executed (since it is not in if ). That's why this function always returns 2 .

    
30.10.2015 / 19:43
0

The first obs is that you give a return in the read_play () function before entering the while (). That is, this validation never happens.

Second thing is this% wrapper% defines values from 1 to 4 (should be 1 to 3) and this invalidates some situations.

And obviously the problem with the ";" already mentioned.

    
30.10.2015 / 19:47