Ir ao conteúdo

Ajuda com algoritmo em C


Ir à solução Resolvido por ednafelix,

Posts recomendados

Postado

Olá! Estou com uma probleminha pra terminar este algoritmo em C, será que alguém consegue me ajudar? Meu problema é na hora de mudar o jogador quando ele erra o palpite.

 

"O jogo com dois participantes que devem adivinhar um número sorteado de 1 a 1000. A cada turno, um jogador
tem a chance de tentar adivinhar o número. Ao errar o palpite, o computador indica se o número secreto é maior ou menor e
passa a vez para o oponente. Seu programa deverá perguntar o nome dos dois jogadores e sortear um deles para iniciar o jogo."
 
Isto é o que eu já fiz e está rodando perfeitamente:
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
 
int main()
 
{
    char jogador[2][20];
    int i, j, num1;
 
    for (j = 0; j < 2; j++)
    {
        printf("Digite o nome do primeiro jogador: ");
        gets(jogador[j]);
    }
 
//sorteio do jogador que irá começar a jogar
 
    srand(time(NULL));
    j = rand()%2;
 
 
    printf("Jogador sorteado para comecar: %s", jogador[j]);
 
//sorteio do numero a ser adivinhado
 
        srand( time( NULL ));
        int num_sort = rand() % 5 + 1;
 
 
    do
    {
        printf("\nPalpite de %s: ", jogador[j]);
        scanf("%d", &num1);
 
 
        if (num1 > num_sort)
    {
        printf ("Numero é menor!");
    }
 
        if (num1 < num_sort)
    {
        printf ("Numero é maior!");
    }
 
    else
        if (num1 == num_sort)
    {
        printf("O numero esta correto! %d ", num_sort);
    }
 
    }
 
    while (num1 != num_sort);
}

 

Postado

Olá!

 

Olha sou inciante em C e não sei se você já conseguiu resolver o problema, mas de todo modo . . .

 

|16|aviso: the `gets' function is dangerous and should not be used - aqui apareceu o alerta de que a função gets() não deve ser usada, por isso a substitui por scanf()

 

|58|warning: control reaches end of non-void function - você esqueceu o return 0; antes da ultima chave de fechamento

 

|11|warning: unused variable ‘i’ - a variavel " i "não está sendo usada em nenhuma parte do seu programa

 

Na função scanf() eu usei o código de formatação %[^\n]s, mas ela causou um erro durante a execução do programa pulando o nome do segundo jogador, no meu caso tive que usar uma função __fpurge(stdin); para a limpeza do buffer  do teclado para o problema desaparecer, você pode usar qualquer outro codigo de sua preferência.

 

Não sei qual sistema operacional você usa, mas se for o windows caso você tenha o mesmo problema, você pode tentar usar outro codigo de formatação em scanf(), ou mesmo usar um codigo de formatação no proprio scanf() que faça a limpeza do buffer, caso você queira usar uma função ao final de casa scanf() para a limpeza de buffer, muito provavelmente você encontrará como resposta a função "fflush(stdin);" , MAS deixo um ALERTA, a função pode apresentar um comportamento indefinido não especificado durante a execução do programa, por isso lhe aconselho a não usa-la, mas para programas mais simples e pequenos como o seu acho que você não terá nenhum problema . . .

 

Com relação ao codigo fiz algumas modificações:

#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){    char jogador [ 2 ] [ 20 ];    int j, num1;    for ( j = 0; j < 2; j++ )       {          printf ( "Digite o nome do primeiro jogador: " );          scanf ( "%[^\n]s", jogador [ j ] );          __fpurge ( stdin );       }//sorteio do jogador que irá começar a jogar    srand ( time ( NULL ) );    j = rand () % 2;    printf ( "Jogador sorteado para comecar: %s", jogador [ j ] );//sorteio do numero a ser adivinhado        srand ( time ( NULL ) );        int num_sort = rand () % 5 + 1;    do    {        printf ( "\nPalpite de %s: ", jogador [ 0 ] );        scanf ( "%d", &num1 );        if ( num1 > num_sort )          {             printf ( "Numero é menor!" );          }        if ( num1 < num_sort)          {             printf ( "Numero é maior!" );          }    else        if ( num1 == num_sort )          {             printf ( "O numero esta correto! %d ", num_sort );             break;          }          printf ( "\nPalpite de %s: ", jogador [ 1 ] );        scanf ( "%d", &num1 );        if ( num1 > num_sort )          {             printf ( "Numero é menor!" );          }        if ( num1 < num_sort)          {             printf ( "Numero é maior!" );          }    else        if ( num1 == num_sort )          {             printf ( "O numero esta correto! %d ", num_sort );             break;          }    } while ( num1 != num_sort );    return 0;}

O problema estava acontecendo porque você só especificou um apenas um jogador para jogar

printf ( "\nPalpite de %s: ", jogador [ j ] );

Para resolver este problema tive que fazer duas coisas:

 

- primeiro fiz um Ctrl+c Ctrl+v do codigo dentro do laço do-while

- segundo eu alterei o valor de acesso individual de cada um dos usuarios no vetor, jogador [ 0 ] e jogador [ 1 ]

 

Bom acho que é isso . . .

 

Ubuntu 14.04  GNU GCC 4.8  Codeblocks 13.12

 

Espero ter Ajudado ! ! !

Postado

Boa noite Felipe!

Primeiramente obrigada pela ajuda.

 

Sobre o código, como eu disse estava rodando perfeitamente, eu estava querendo saber sobre como passar a vez para o outro jogador quando o primeiro erra. E sobre isso eu gostaria de perguntar: Definir 0 ou 1 na hora de dizer de qual jogador é a vez não anula o sorteio que foi feito???

 

printf ( "\nPalpite de %s: ", jogador [ 0 ] );

 

printf ( "\nPalpite de %s: ", jogador [ 1 ] );

 

 

printf ( "Jogador sorteado para comecar: %s", jogador [ j ] );

//sorteio do numero a ser adivinhado

srand ( time ( NULL ) );
int num_sort = rand () % 5 + 1;

 

 

Mais uma coisa: a função gets funciona bem aqui, porém a __fpurge ( stdin ); dá erro.

 

Meu sistema é o win 7 e uso o mesmo compilador que você na mesma versão.

Postado

Olá!

 

 

- peço desculpas pela confusão com “__fpurge(stdin);” ela é uma função especifica para a limpeza de buffer no Linux, eu esqueci de mencionar.

 

- Sobre a função gets() leia este link ( pdf ):

http://repositorio.ufla.br/bitstream/1/5018/1/TCC_Buffer_overflow_teoria_e_exploracao.pdf

eu acho que na pagina 32, diz um pouco sobre gets().

 

- Sobre o sorteio peço desculpa outra vez eu deixei esta parte passar, vou dar uma olha e ver se consigo algo ! ! !

  • Solução
Postado

Felipe muitoooo obrigadaaaaaa!!! Você me deu uma luz e eu consegui fazer o algoritmo rodar! Veja como ficou o código!

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
 
int main()
 
{
    char jogador[2][20];
    int  j, num1;
 
    printf("\n*******Bem vindo ao jogo de adivinhacao, preciso de dois participantes!*******\n");
 
    for (j = 0; j < 2; j++)
    {
        printf("\nDigite o nome do primeiro jogador: ");
        gets(jogador[j]);
    }
 
//sorteio do jogador que irá começar a jogar
 
    srand(time(NULL));
    j = rand()%2;
 
 
    printf("\nJogador sorteado para comecar: %s", jogador[j]);
 
//sorteio do numero a ser adivinhado
 
        srand( time( NULL ));
        int num_sort = rand() % 50 + 1;
 
 
    do
    {
        printf("\n\nPalpite de %s: ", jogador[j]);
        scanf("%d", &num1);
 
        if (jogador[j] == jogador[0])
        {
            j = 1;
        }
        else
            if (jogador[j] == jogador[1])
        {
            j = 0;
        }
 
 
        if (num1 > num_sort)
    {
        printf ("\nNumero é menor!");
    }
 
        if (num1 < num_sort)
    {
        printf ("\nNumero é maior!");
    }
 
    else
        if (num1 == num_sort)
    {
        printf("\nO numero %d esta correto!!!!!!! ***** Parabenssssss *****  \n", num_sort);
        break;
    }
 
    printf("\n\nPalpite de %s: ", jogador[j]);
        scanf("%d", &num1);
 
           if (jogador[j] == jogador[0])
        {
            j = 1;
        }
        else
            if (jogador[j] == jogador[1])
        {
            j = 0;
        }
 
 
        if (num1 > num_sort)
    {
        printf ("\nNumero é menor!");
    }
 
        if (num1 < num_sort)
    {
        printf ("\nNumero é maior!");
    }
 
    else
        if (num1 == num_sort)
    {
        printf("\nO numero %d esta correto!!!!!!! ***** Parabenssssss ***** \n", num_sort);
        break;
    }
 
    }
 
    while (num1 != num_sort);
}
 
 
:D  :D  :D  :D  :D  :D  :D
Postado

Olá!

 

Oi fico feliz em saber que ajudei, a proposito não vai servir de nada, mas de todo modo . . .

int i = 1;    for ( j = 0; j < 2; j++ )       {          printf ( "\nDigite o nome do %dª jogador: ", i );          gets(jogador [ j ] );                    i++;       }

Acho que vai funcionar sem problema, no seu codigo . . .

 

Até a proxima ! ! !

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!