Difficulty with a loop "for" in C [closed]

2

I'm developing a forcing game in the C language, however I'm having trouble finding where the problem is in the main function program, the play function. I believe the problem is in the for loop, but I've tried everything and still can not resolve it. I need a way for it to go through all of the positions that have not yet been filled (it's in the penultimate, have a comment above it saying what it is)

void jogar(char *palavra){
  int t, i, erros = 0, char_especial = 0, acertou = 0, tentativas = 0;
  char letras_tentadas[20]; 
  char *teste = "homem-aranha 3";

  //Esse for mede a quantidade de caracteres presentes na palavra a ser adivinhada
  for(t = 0; palavra[t] != '
void jogar(char *palavra){
  int t, i, erros = 0, char_especial = 0, acertou = 0, tentativas = 0;
  char letras_tentadas[20]; 
  char *teste = "homem-aranha 3";

  //Esse for mede a quantidade de caracteres presentes na palavra a ser adivinhada
  for(t = 0; palavra[t] != '%pre%'; t++){
    if(palavra[t] == '-' || palavra[t] == ' '){
      char_especial++; //esse contador vai ser usado para subtrair os caracteres especiais para que fiquem visiveis para o usuario
    }
  }

  printf("A palavra possui %d letras\n\n", (t - char_especial));

  char* copia_randwrd = ((char*) malloc(t * sizeof(char)));//alocação dinamica para o que vai ser mostrado ao usuario
  if(!copia_randwrd){
    return;
  }

  //printa a palavras com as letras substituidas por underlines e mostra espaços e hífens
  for(i = 0; palavra[i] != '%pre%'; i++){
    if(palavra[i] == '-'){
      printf("- ");
    }
    else if(palavra[i] == ' '){
      printf(" ");
    }
    else{
      printf("_ ");
    }
  } 

  //preenchi o vetor com espaços vazios para facilitar a validação de um único caractere
  for(i = 0; i < 20; i++){
    letras_tentadas[i] = '1';
  }

  for(i = 0; i < t; i++){
    copia_randwrd[i] = '_';
  }

  do{
    //Letras tentadas
    voltar:
    if(tentativas > 0){
      printf("\n\nletras tentadas: ");
      for(i = 0; i < tentativas; i++){
        printf("%c", letras_tentadas[i]);
      }
    }


    printf("\n\nDigite uma letra: ");
    scanf(" %c", &letras_tentadas[tentativas]);

    //impede que o jogador tente a mesma letra duas vezes.
    if(tentativas > 0){
      for(i = 0; i <= tentativas; i++){
        if(letras_tentadas[i - 1] == letras_tentadas[tentativas]){
          printf("Você já tentou a letra %c. Por favor, tente uma letra diferente.\n", letras_tentadas[tentativas]);
          goto voltar;
        }
      }
    }
    //Confere se foi inserido apenas um caractere
    if(letras_tentadas[tentativas + 1] != '1'){
      printf("Por favor, digite uma letra de cada vez.\n\n");
      goto voltar;
    }

    letras_tentadas[tentativas] = tolower(letras_tentadas[tentativas]);//transforma o input do usuario em lower case.
//Acredito que o problema esteja neste for
    for(i = 0; i < t && i < 20; i++){

      if(palavra[i] == letras_tentadas[tentativas]){
        copia_randwrd[i] = letras_tentadas[tentativas];
        for(i = 0; i < t; i++){
          printf("%c ", copia_randwrd[i]);
        }
      }
      //***PROBLEMA***
      else{
        erros++;
        //printf("A letra '%c' não faz parte da palavra secreta.\n", letras_tentadas[tentativas]);
        //printf("_ ");
      }
    }

    tentativas++;
    if(strcmp(copia_randwrd, palavra) == 0){
      acertou++;
    }

  }while(acertou != 1 || erros < 5); //***PROBLEMA***

  if(erros >= 5){
    printf("GAME OVER.\n\nA palavra era: ");
    for(i = 0; i < t; i++){
      printf("%c", palavra[i]);
    }
  }
  else if(acertou == 1){
    printf("Parabens, voce venceu!");
  }
}
'; t++){ if(palavra[t] == '-' || palavra[t] == ' '){ char_especial++; //esse contador vai ser usado para subtrair os caracteres especiais para que fiquem visiveis para o usuario } } printf("A palavra possui %d letras\n\n", (t - char_especial)); char* copia_randwrd = ((char*) malloc(t * sizeof(char)));//alocação dinamica para o que vai ser mostrado ao usuario if(!copia_randwrd){ return; } //printa a palavras com as letras substituidas por underlines e mostra espaços e hífens for(i = 0; palavra[i] != '%pre%'; i++){ if(palavra[i] == '-'){ printf("- "); } else if(palavra[i] == ' '){ printf(" "); } else{ printf("_ "); } } //preenchi o vetor com espaços vazios para facilitar a validação de um único caractere for(i = 0; i < 20; i++){ letras_tentadas[i] = '1'; } for(i = 0; i < t; i++){ copia_randwrd[i] = '_'; } do{ //Letras tentadas voltar: if(tentativas > 0){ printf("\n\nletras tentadas: "); for(i = 0; i < tentativas; i++){ printf("%c", letras_tentadas[i]); } } printf("\n\nDigite uma letra: "); scanf(" %c", &letras_tentadas[tentativas]); //impede que o jogador tente a mesma letra duas vezes. if(tentativas > 0){ for(i = 0; i <= tentativas; i++){ if(letras_tentadas[i - 1] == letras_tentadas[tentativas]){ printf("Você já tentou a letra %c. Por favor, tente uma letra diferente.\n", letras_tentadas[tentativas]); goto voltar; } } } //Confere se foi inserido apenas um caractere if(letras_tentadas[tentativas + 1] != '1'){ printf("Por favor, digite uma letra de cada vez.\n\n"); goto voltar; } letras_tentadas[tentativas] = tolower(letras_tentadas[tentativas]);//transforma o input do usuario em lower case. //Acredito que o problema esteja neste for for(i = 0; i < t && i < 20; i++){ if(palavra[i] == letras_tentadas[tentativas]){ copia_randwrd[i] = letras_tentadas[tentativas]; for(i = 0; i < t; i++){ printf("%c ", copia_randwrd[i]); } } //***PROBLEMA*** else{ erros++; //printf("A letra '%c' não faz parte da palavra secreta.\n", letras_tentadas[tentativas]); //printf("_ "); } } tentativas++; if(strcmp(copia_randwrd, palavra) == 0){ acertou++; } }while(acertou != 1 || erros < 5); //***PROBLEMA*** if(erros >= 5){ printf("GAME OVER.\n\nA palavra era: "); for(i = 0; i < t; i++){ printf("%c", palavra[i]); } } else if(acertou == 1){ printf("Parabens, voce venceu!"); } }

Code on GitHub

    
asked by anonymous 21.11.2018 / 02:59

0 answers