Jump to content
Fórum Script Brasil
  • 0

! (iniciante) JOGO DA FORCA (DUVIDAS) !


athoslive

Question

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 to comment
Share on other sites

15 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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");  
}

Edited by Binder
Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...