Jump to content
Gabriele

Condição de paragem de ciclo

Recommended Posts

Gabriele

Olá! Não sabia ao certo qual título colocar, então, perdão.

Eu estou tentando editar esse software de forma que ele contenha mais de 3 jogadas (melhor de 3) e que o jogador possa "parar" de jogar quando quiser (quando digitar 4), de forma que ni final mostre o placar. Porém, assim que eu compilo o código, ele mostra apenas o primeiro printf.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define PEDRA 1
#define PAPEL 2
#define TESOURA 3
int pontosJogador;
int pontosComputador;
void jogo();
void imprimeItem(int item);
int verifica(int p1, int p2);
int main(){    
  srand(time(NULL)); //usado para gerar numeros diferentes    
  printf("                           PEDRA - PAPEL - TESOURA                             \n");
int i;
  for(i=0; i!=4; i=i){
    while(i != 4){
    }        
    jogo();
    printf("-------------------------------------------------------------------------------\n");
  }    
  printf(" Total de Pontos\n");    
  printf("         Voce: %d \n", pontosJogador);    
  printf("   Computador: %d \n", pontosComputador);    
  printf("\n Obrigado por jogar!");    
  system("pause>nul");    
  return 0;
}
void jogo(){    
  int itemJogador;
  int itemComputador;    
  printf("\n Escolha 1.Pedra 2.Papel 3.Tesoura 4.Sair\n Sua escolha: ");    
  scanf("%d", &itemJogador); //jogador faz sua escolha    
  itemComputador = rand()%3+1; //computador faz sua escolha    
  printf("\n Voce -> ");    
  imprimeItem(itemJogador);    
  printf(" x ");    
  imprimeItem(itemComputador);    
  printf(" <- Computador.\n");    
  int ganhador = verifica(itemJogador, itemComputador);    
  printf("\n");    
  if(ganhador == 1){        
    printf(" VOCE GANHOU!\n");        
    pontosJogador++;    
  }    
  else if(ganhador == 2){        
    printf(" COMPUTADOR GANHOU!\n");        
    pontosComputador++;    
  }    
  else{        
    printf(" EMPATOU!\n");    
      }    
  printf("\n");
}
void imprimeItem(int item){    
  if(item == PEDRA){        
    printf("PEDRA");    
  }
  else if(item == PAPEL){        
    printf("PAPEL");    }    
  else{       
    printf("TESOURA");
  }
}
int verifica(int p1, int p2){ /*Função que verifica qual jogador ganhou e retorna 1 ou 2 retorna 0 ao empatar*/    
  int ganhador;    
  if(p1 == p2){   //empate        
    ganhador = 0;    
}    
  if(p1==PEDRA && p2==TESOURA){ 
    ganhador = 1; 
}    if(p1==PEDRA && p2==PAPEL){
  ganhador = 2; 
}    
if(p1==PAPEL && p2==PEDRA){ 
  ganhador = 1;
}
if(p1==PAPEL &&p2==TESOURA){ ganhador = 2; 
}    
  if(p1==TESOURA && p2==PAPEL){ 
    ganhador = 1; 
}    
  if(p1==TESOURA && p2==PEDRA){ 
    ganhador = 2;
}    
  return ganhador;
}

 

Edited by Gabriele
Não sabia sobre "<>"

Share this post


Link to post
Share on other sites
antseq

Salvo erro o problema está no seu primeiro "for" que não faz muito sentido:

for(i=0; i!=4; i=i)

deveria ser:

for(i=1; i<4; i++)

ou seja (i começa em 1; enquanto menor que 4; incrementa i)  => repete 3 vezes (i=1; i=2; i=3) "3 jogadas"

  • Vote 1

Share this post


Link to post
Share on other sites
iron
int i;
for(i=0; i!=4; i=i){
    while(i != 4){
    }     

Primeira iteração o "i" é igual  a 0.
Entras no ciclo for e logo a seguir entras num ciclo while infinito porque o "i" é diferente de 4.

Por causa disso, a função 

jogo();

nunca é chamada.


Cumprimentos,
iron

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.