Ir para conteúdo
Fórum Script Brasil
  • 0

! (iniciante) JOGO DA FORCA (DUVIDAS) !


athoslive

Pergunta

Quando eu peço para ele rodar,qualquer palavra que eu coloque ele vai considerar certo,exemplo: "antes de começar o jogo digite a palavra: (ai eu coloco:) athos

(depois:) digite uma palavra pra ver se é a certa !: (eu coloco:) ABC." e ele vai, alguém sabe como fazer para evitar este erro e gravar a palavra que eu colocar inicialmente? aqui esta o código:

#include<stdio.h>
#include<conio.h>

void main()
{
    char a,b,c,d,e;
    char* palavra;
    clrscr();
    printf("Este e um jogo da forca, digite a palavra que sera usada:%s",a,b,c,d,e);
    scanf("%s", &a, &b, &c, &d, &e);
    printf("Pronto ! O jogo comessara em alguns instantes...");
    getch();
    printf("Bom jogo !");
    clrscr();
    inicio:
    printf("\nÉÍÍÍ» ");
    printf("\nº   º ");
    printf("\nº   o ");
    printf("\nº   Â ");
    printf("\nº  ³ ³");
    printf("\nº     ");
    printf("\nÊÍ    ");
    printf("\nDigite uma palavra:");
    scanf("%s", &palavra);
    if (palavra=="athos")
    {
    printf("Parabens ! voce salvou o boneco !");
    getch();
    }
    else
    {
    printf("voce errou ! tente denovo !");
    goto inicio;
    }
    getch();
}

quando aparece no código coisa tipo: Êi n° etc... é a forca desenhada na tabela asc !

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

Olá,tem alguns erros no seu código:

1) Para declarar um ponteiro de char, faça assim:

char *palavra;
Para declarar mais de um ponteiro por linha, usa-se um operador indireto (*) para cada.
char *ch1, *ch2; (são ponteiros para o tipo char).
Obs: Não vejo a necessidade de você utilizar ponteiros nesse exemplo. 2) Para limpar a tela eu usei o comando system("cls") da biblioteca #include<conio.h>. 3)Se você pretende usar uma variavel char para armazenar uma palavra, da forma que você fez está errada.Pois ela ira armazenar apenas um caracter dentro da variavel. Para armazenar um caracter:
char a;
Para armazenar uma string do tipo char(mais de um caracter);
char a[10];// tamanho da variavel você coloca entre os colchetes;
4) Comparar strings com o operador '==' não é correto. É necessário comparar caractere por caractere. É isso que a função strcmp() faz. Por fim, eu faria assim esse algoritimo:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
    //Declaração da variavel
    char palavra[10];
    
    //Apresentacao do programa
    printf("O jogo comecara em alguns instantes...Bom Jogo!\n");
    printf("\nÉÍÍÍ» ");
    printf("\nº   º ");
    printf("\nº   o ");
    printf("\nº   Â ");
    printf("\nº  ³ ³");
    printf("\nº     ");
    printf("\nÊÍ    ");
    
    //Recebe dados do usuario   
    printf("\nDigite uma palavra:");
    gets(palavra);
        
    //Logica do problema    
    if(!strcmp(palavra,"athos")){
        printf("Parabens ! voce salvou o boneco !");}
           
    else{
        printf("voce errou ! tente denovo !\n");
        return main();}
       
      
    getch();
}//main

Link para o comentário
Compartilhar em outros sites

  • 0

Olha, acho que infelizmente não apenas nos sistemas operacionas Windows Vista/XP/98/2000/2003.

Mas o código está correto e testei aqui.Deve ser alguma configuração no teu programa.Crie um novo projeto/arquivo e coloque esse código

e salve com a extensão correta .cpp

Exemplo : Meuprograma.cpp

Link para o comentário
Compartilhar em outros sites

  • 0
Olá,tem alguns erros no seu código:

1) Para declarar um ponteiro de char, faça assim:

char *palavra;
Para declarar mais de um ponteiro por linha, usa-se um operador indireto (*) para cada.
char *ch1, *ch2; (são ponteiros para o tipo char).
Obs: Não vejo a necessidade de você utilizar ponteiros nesse exemplo. 2) Para limpar a tela eu usei o comando system("cls") da biblioteca #include<conio.h>. 3)Se você pretende usar uma variavel char para armazenar uma palavra, da forma que você fez está errada.Pois ela ira armazenar apenas um caracter dentro da variavel. Para armazenar um caracter:
char a;
Para armazenar uma string do tipo char(mais de um caracter);
char a[10];// tamanho da variavel você coloca entre os colchetes;
4) Comparar strings com o operador '==' não é correto. É necessário comparar caractere por caractere. É isso que a função strcmp() faz. Por fim, eu faria assim esse algoritimo:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
    //Declaração da variavel
    char palavra[10];
    
    //Apresentacao do programa
    printf("O jogo comecara em alguns instantes...Bom Jogo!\n");
    printf("\nÉÍÍÍ» ");
    printf("\nº   º ");
    printf("\nº   o ");
    printf("\nº   Â ");
    printf("\nº  ³ ³");
    printf("\nº     ");
    printf("\nÊÍ    ");
    
    //Recebe dados do usuario   
    printf("\nDigite uma palavra:");
    gets(palavra);
        
    //Logica do problema    
    if(!strcmp(palavra,"athos")){
        printf("Parabens ! voce salvou o boneco !");}
           
    else{
        printf("voce errou ! tente denovo !\n");
        return main();}
       
      
    getch();
}//main

Ponteiros declaram de três formas

ptr *char;

ptr * char;

ptr* char;//Estão corretas

Ponteiros de chars pode ser usados com strings, não é a toa que cabeçalhos de funções é comum ver void funcao(const *char str);

a função gets é utilizada para leitura de strings

gets(string);

O system("cls") não é padrão C ANSI, só roda em ambiente windows.

stcmp() é do arquivo cabeçalho (header) <string.h>

Link para o comentário
Compartilhar em outros sites

  • 0

Bom,quando eu vi o código do Binder, eu quis aprimorar ele, então hoje eu fui estudar o código e baixei o dev c.

Logo apos eu criei este código, onde não sei porque ele não consegue reconhecer comparar a palavra e palavra 2 no if.

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

main()
{
      char *palavra;
      char *palavra2;
      int t=5,b=0;
      system("cls");
      printf("Jogador 1 digite a palavra que sera usada:");
      scanf("%s",&palavra);
      getch();
      while(b<5)
      {
      system("cls");
      printf("Jogador 2, tente adivinhar a palavra. Voce tem %d tentativas",t);
      printf("\nÉÍÍÍ» ");
      printf("\nº   º ");
      printf("\nº   o ");
      printf("\nº   Â ");
      printf("\nº  ³ ³");
      printf("\nº     ");
      printf("\nÊÍ    ");
      printf("\nDigite a palavra:");
      scanf("%s",&palavra2);
      if(palavra == palavra2)
      {
                printf("Parabens, voce acertou !");
                getch();
                return main();
                }
      else
      {
                printf("Voce errou!");
                getch();
                }
      t --;
      b ++;
      }
}

Link para o comentário
Compartilhar em outros sites

  • 0
Bom,quando eu vi o código do Binder, eu quis aprimorar ele, então hoje eu fui estudar o código e baixei o dev c.

Logo apos eu criei este código, onde não sei porque ele não consegue reconhecer comparar a palavra e palavra 2 no if.

main()
{
      char *palavra;
      char *palavra2;

      if(palavra == palavra2)
      {
        printf("Parabens, voce acertou !");
        getch();
        return main();
      }
      else
      {
        printf("Voce errou!");
        getch();
     }

}
Isso ai está errado: 1) Como expliquei anteriormente não se compara strings em C com sinal de igual(==), é preciso utilizar a função strcmp. Tente isso:
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

main()
{
      char palavra1[30],palavra2[30];
      int t=5,b=0;
      
      printf("Jogador 1 digite a palavra que sera usada:");
      scanf("%s",&palavra1);
          
      while(b<=4)
      {
           system("cls");
           printf("Jogador 2, tente adivinhar a palavra. Voce tem %d tentativas",t);
           printf("\nÉÍÍÍ» ");
           printf("\nº   º ");
           printf("\nº   o ");
           printf("\nº   Â ");
           printf("\nº  ³ ³");
           printf("\nº     ");
           printf("\nÊÍ    ");
           printf("\nDigite a palavra:");
           scanf("%s",&palavra2);
      
            if(!strcmp(palavra2,palavra1)){
                printf("Parabens voce acertou jogador 2!\n");
                system("pause");
                exit(0);}
            else{
                printf("Voce errou! Tente denovo !\n");
                system("pause");
            b++;  
            t--;
            }   
    }
           printf("Fim do jogo,voce perdeu o jogo jogador 2\n");
     
   system("pause");  
}

Editado por Binder
Link para o comentário
Compartilhar em outros sites

  • 0

Olá, Dam Oliveira. Agora até surgiu uma dúvida quanto a sua colocação em relação a comparações de Strings.

Em Java as Strings são classes e assim podem ser criado um objeto do tipo String, certo?

Mas em Java para comparar Strings se usar o == vai ser comparado o objeto que foi criado no Heap ( parte da memória onde ficam armazenados os objetos em Java ). Logo o == não funciona p comparar Strings em Java

Para se comparar o "conteúdo" de uma String em Java se usa o equals().

A dúvida é a seguinte (eu ainda não comecei a estudar C++): Se em Java, que é OO não se usa o == para comparar Strings por que em C++, q tbém é uma Linguagem Orientada a Objetos se usa o ==, já q em ambos os casos Strings são objetos?

Não entendi essa colocação

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, giu_d_ disse:

Olá, Dam Oliveira. Agora até surgiu uma dúvida quanto a sua colocação em relação a comparações de Strings.

Em Java as Strings são classes e assim podem ser criado um objeto do tipo String, certo?

Mas em Java para comparar Strings se usar o == vai ser comparado o objeto que foi criado no Heap ( parte da memória onde ficam armazenados os objetos em Java ). Logo o == não funciona p comparar Strings em Java

Para se comparar o "conteúdo" de uma String em Java se usa o equals().

A dúvida é a seguinte (eu ainda não comecei a estudar C++): Se em Java, que é OO não se usa o == para comparar Strings por que em C++, q tbém é uma Linguagem Orientada a Objetos se usa o ==, já q em ambos os casos Strings são objetos?

Não entendi essa colocação

A resposta é a causa dos operadores sobrecarregados. Em c++ podemos sobrecarregar praticamente qualquer operador. Provavelmente isso não exista em java, mas você verá isso em c++ pois a orientação a objetos é muito mais potente em c++.
De uma olhada aqui:
https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Sobrecarga_de_operadores

 

Logo investigue mais sobre o assunto.

Quando entender... a resposta é que o próprio linguagem já traz alguns operadores sobrecarregados.

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu pela resposta. Estou só terminando de dar uma revisada em C e daí vou partir para o C++, se Deus assim permitir.

estou com uma vontade bastante grande de estudar C++. Isso posso afirmar!

Creio q no curso q estou p fazer vai ser ensinado a respeito disso q você me disse

Abraço!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...