1
resposta

Erro intermitente "collect2.exe: error: ld returned 1 exit status"

O código abaixo roda algumas vezes, porém em outros momentos mostra este erro "collect2.exe: error: ld returned 1 exit status". Não identifico o problema. Alguém pode dar uma luz?

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

int main(){
    int     numeroSecreto = 9;
    int     chute         = 0;
    int     contador      = 0;
    int     ganhou        = 0;
    double  pontos        = 1000;

    //int numeroDeChutes = 2;

    printf("****************************************\n");
    printf("*********** Bem-vindo ao jogo **********\n");
    printf("****************************************\n");

    //printf("\nO numero secreto eh %d \n", numeroSecreto);

    while(ganhou == 0){
            printf("\nDigite um numero:\n");
            scanf("%d", &chute);

        if(chute < 0) {
            printf("\nSomente numeros positivos, neh meu parca!!\n"); 
            continue; //Não executa o resto do codigo, mas faz o loop continuar.
        }else{
                printf("Voce digitou: %d \n", chute);
                contador++;

                int acertou = chute == numeroSecreto;
                int maior   = chute > numeroSecreto;
                int menor   = chute < numeroSecreto;

                    if(acertou){
                    printf("Show de bola, voce acertou o numero secreto!!\n");
                    printf("Voce acertou em %d tentativas\n", contador);
                    printf("Voce fez %.1f pontos.", pontos);
                    ganhou = 1; //Para a execução.
                    }

                    pontos -= abs(chute - numeroSecreto)/2.0;

                    if(menor){ printf("O numero secreto eh menor que %d! \n", chute);}
                    if(maior){ printf("O numero secreto eh maior que %d! \n", chute);}

           }
    }
    return 0;
}
1 resposta

Olá Andrey.

Não consegui reproduzir seu erro até o momento, mas notei um detalhe, acredito que sua logica de maior e menor está invertida.


int acertou = chute == numeroSecreto;
int maior   = chute > numeroSecreto;
int menor   = chute < numeroSecreto;

Aqui você cria valores booleanas que dizem se o chute é maior, menor ou igual ao numero secreto.


if(menor){ printf("O numero secreto eh menor que %d! \n", chute);}
if(maior){ printf("O numero secreto eh maior que %d! \n", chute);}

E aqui você por exemplo, usando a variável menor que diz se o chute é menor que o numero secreto é verdadeira, você escreve o oposto, "O numero secreto eh menor que %d! \n"


int acertou = chute == numeroSecreto;
int numSecreto_eh_maior   = numeroSecreto > chute;
int numSecreto_eh_menor   = numeroSecreto < chute;        

Para resolver isso, mudei o nome das variaveis para facilitar a leitura e evitar a confusão.


if(numSecreto_eh_menor){ printf("O numero secreto eh menor que %d! \n", chute);}
if(numSecreto_eh_maior){ printf("O numero secreto eh maior que %d! \n", chute);}

E fiz também a mudança nos ifs, e onde fica clara como a leitura do código melhorou.

Me diga se concorda com o que eu propus e eu vou continuar tentando reproduzir o erro na minha maquina.

Bons Estudos.