Ir ao conteúdo
  • Cadastre-se
Ikkyy

C Valor de Soma Diferente

Recommended Posts

int dado (){
    int dado[30], i, x;
    printf("Os resultados dos dados foram:");
    srand((unsigned) time(NULL));
        for (i = 0; i < 3; i = i + 1){
        dado[i] = (rand() % 6) + 1;
        printf(" %i", dado[i]);
        x = dado[i] + x;
        }
        printf("\nTotal %d", x);
}

int main(){
    dado();
return 0;
}

Fiz esse código pra simular uma rolagem de 3 dados 6 faces (ignorem o tamanho da array).

 

Porém o output do x, vem com um numero maior(acredito que seja octal).

 

unknown.png

 

quando eu coloco o mesmo código dentro do int main, ele funciona direitinho, porém estou tentando rodar ele fora, em uma void ou int.

 

Estranhamente passei o mesmo código para um amigo e no dele deu o resultado certo.

Alguem tem uma luz doq pode estar acontecendo?

 

Obrigado pela atenção !

Compartilhar este post


Link para o post
Compartilhar em outros sites

Inicialize a variável x.

int dado[30], i, x = 0;

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Mauro Britivaldocaraca, algo estão simples, sabe me explicar porque isso acontece em algumas maquinas e em outras nao?

como eu disse, um amigo rodou o codigo identifico e obteve o resultado desejado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 minutos atrás, Ikkyy disse:

caraca, algo estão simples, sabe me explicar porque isso acontece em algumas maquinas e em outras nao?

Não sou o colega mencionado mas posso ajudar...

Pode ser o compilador na verdade (a versão... qualquer coisa que mude pode influenciar no resultado final). Uns tratam e outros não... Dai a chance de dar probleminhas :v

 

5 minutos atrás, Ikkyy disse:

como eu disse, um amigo rodou o codigo identifico e obteve o resultado desejado.

Ele pode ter usado outro compilador ou uma outra interface pra fazer isso. De qualquer forma, é sempre bom inicializar... isso ai causa certos vícios de programação.

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maioria realmente não fazem esse tratamento de maneira autônoma principalmente mingw32-gcc, pois esse eu conheço.

18 horas atrás, Ikkyy disse:

como eu disse, um amigo rodou o codigo identifico e obteve o resultado desejado.

Olha pode ser o windows, por exemplo aqui temos o windows 10 com 4Gb, quando inicializando ele reserva para seus programas o máximo de memória possível para fazer uma rápida inicialização, depois que termina essa tarefa os programas deixam gravados na memoria alguns dados inúteis e incoerentes. Então é muito comum esta prática de todo programa limpar [zerar] suas variáveis antes de usar  e deixa lixo [resto de dados] na memória quando não precisa mais dela ou quando finaliza a tarefa e até mesmo saímos do software.

 

Pode ocorrer de que o windows do amigo não ocupa toda a memória, então temos ai parte significativa da memória limpa [zerada] que coincidentemente é ocupada pelo programa C quando compilado.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×