Jump to content
Sign in to follow this  
mcosta

erro no jogo da forca

Recommended Posts

mcosta

olá pessoal preciso de ajuda!!

este jogo já estou a entender mas tenho um problema!!

no código que estou a aprender e que gentilmente esta colocado na net o "joga" na função jogo aparece como Bool joga =1, errou;

No entanto no c, não reconhece booleanos..como faço??

outra dúvida... e coloco aqui o código todo...todas as funções estão a funcionar!!

Mas na opção do menu jogar...ele funciona mas não faz nada:-(( diz qsempre que o caracter ja foi introduzido..porque??

gratos

#include <stdio.h>    
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <ctype.h>

#define PAL 100

FILE *doc;

int criou = 0, leu = 0, errou;
char palavras[PAL][25];


void creditos();
void lepal();
void manual();
void menu();
void erase();
void jogo();

main()
{
      menu();
      }

void manual(){
    
     system("cls");
     printf("Este e o manual do jogo da forca por Jos%c Mario Silva Rosa Filho.\n",130);
     printf("                                                                                ");
     printf("Na segunda opcao do menu criar lista de palavras, ele ira gerar um txt\n");
     printf("Chamado \"Forca.txt\" nesse arquivo se concentra um banco de palavras\n");
     printf("O qual suportara um maximo de 100 palavras para leitura, entao se por\n");
     printf("Ventura o usuario criar mais de 100 palavras elas nao serao utilizadas.\n");
     printf("O usuario podera cadastrar 100 palavras sem consultar o banco de palavras.\n");
     printf("                                                                                ");
     printf("*Importante: Nao existe a necessidade de colocar 100 palavras para começar\n");
     printf("a jogar;");
     printf("\n\n\n\n");
     printf("Pressione uma tecla para voltar ao menu!");
     }
     
     void cadastrapal(){              // FUNCAO PARA CADASTRAR PALAVRAS
     int i,tamanho;
    
     if((doc = fopen("forca.txt","a+")) == NULL){
    
            printf("Erro ao Abrir o Arquivo \"FORCA.txt\".");
     exit(0);
     };
    
     for(i=0;i<PAL;i++){
            
            fflush(stdin);
            gets(palavras[ i ]);
            
            if(strcmp(palavras[ i ],"") == 0)
                                                   break;
                                                  
            fwrite(palavras[ i ],sizeof(palavras[25]),1,doc);

     }
     fclose(doc);
    
     criou = 1;
}

void erase(){
    
     int x;
     system("cls");
     printf("Gostaria de Apagar o Arquivo Forca.txt e o Arquivo Creditos.txt?\n");
     printf("1)Sim apagar os dois!\n");
     printf("2)Apagar somente foca.txt!\n");
     printf("3)Apagar somente creditos.txt\n");
     printf("4)Nao apagar!\n");
     scanf("%d",&x);
    
     switch(x){
              
               case 1:{
                       remove("forca.txt");
                       remove("Creditos.txt");
                break;
               }
               case 2:{
                       remove("forca.txt");
                break;
               }
               case 3:{
                       remove("Creditos.txt");
                break;
               }
               case 4:
                       break;
                      
               default:{
                            printf("Nao existe essa opcao!\n\n");
                            break;
               }
     }
    
     printf("Pressione uma tecla para voltar ao menu!");

getch();  
}

void lepal(){                                                // FUNCAO PARA LER PALAVRAS

     int i = 0;
     char nome[] = {"forca.txt"};
    
     if((doc = fopen(nome,"r")) == NULL){
    
            printf("Erro ao Abrir o Arquivo \"FORCA.txt\".");
            getch();
     exit(0);
     };
    
     while(!feof(doc)){
    
             fread(palavras[ i ],sizeof(palavras[25]),1,doc);

     i++;
     }
     fclose(doc);
    
     leu = 1;
}

void jogo(){
    
     system("cls");
     
     int joga;
    
     int i, gera_rand, erros = 8, tamanho, termina = 0, z = 0;
     joga = 1, errou;
     char selecionada[25], verifica[1] = {""}, correta[25], digitadas[25] = {""};
     char letras[57] = {" a b c d e f g h i j k l m n o p q r s t u v w x y z 0"};
    
     srand(time(NULL));
    
     typedef struct Membros_Do_Carinha{     // Exemplo de Uso de estrutura para formaçao do boneco
    
             char cabeca[1];
             char tronco[1];
             char b_p[1];
             char p_b[1];
     }P;
    
    
     for(i=0;i<PAL;i++){
              
              if(strcmp(palavras[ i ],"") == 0 && i == 0){
                                        
                                        printf("Erro voce nao cadastrou nenhuma palavra!\n");
                                        printf("E seu forca.txt nao consta nenhuma palavra!\n");
                                        joga = 0;
                                        break;
              
              }
              
              else if(strcmp(palavras[ i ],"") == 0){
                                        
                                        gera_rand = i;
                                        break;                      
              }
                                                                                      
     }
    
     if(joga){ // Onde o jogo começa meu parceroooo!!!
            
             gera_rand = rand() % gera_rand;
            
             strcpy(selecionada,palavras[gera_rand]);
                        
             for(i=0;i<25;i++)
                            selecionada[ i ] = tolower(selecionada[ i ]);
            
           //  printf("A palavra seleciona e %s\n",selecionada);  
            
             tamanho = strlen(selecionada);
            
             P ERROS;
            
             ERROS.cabeca[1] = 'O';
             ERROS.tronco[1] = '|';
             ERROS.b_p[1] = '/';
             ERROS.p_b[1] = '\\';
            
             for(i = 0;i < tamanho;i++){
                         if(selecionada[ i ] == ' ')
                                           correta[ i ] = ' ';            
                         else
                             correta[ i ] = '_';
             }
             for(i = 0;i < tamanho;i++)
                         if(selecionada[ i ] == ' '){
                                                  tamanho++;
                                                  termina++;
                         }
             while(erros){
                          
                 system("cls");
                        
                 printf("\n");                        
                 printf("+--------------------+\n");
                 printf("|                    |\n");
                 printf("|                    %c\n",erros < 8 ? ERROS.cabeca[1] : ' ');
                 printf("|                   %c%c%c\n",erros < 6 ? ERROS.b_p[1] : ' ',erros < 7 ? ERROS.tronco[1] : ' ',erros < 5 ? ERROS.p_b[1] : ' ');
                 printf("|                    %c\n",erros < 4 ? ERROS.tronco[1] : ' ');
                 printf("|                   %c %c\n",erros < 3 ? ERROS.b_p[1] : ' ',erros < 2 ? ERROS.p_b[1] : ' ');
                 printf("|\n");      
                 printf("|\n");
                 printf("| ");
                
                 for(i = 0;i < tamanho;i++){
                       if(selecionada[ i ] == verifica[0]){                                      
                               correta[ i ] = verifica[0];
                               termina++;                                     //Faz o controle ' se termina for igual a tamanho entao a palavras esta correta e acaba o jogo...
                       }
                 }                  
                
                 for(i = 0;i < tamanho;i++){                                  // Imprime a palavra na tela
                       printf("%c ",correta[ i ]);
                 }
                
                 printf("\n\n");
                
                 for(i = 1;letras[ i ] != '0';i++){                             // Coloca       -      nas letras digitadas                                  
                                     if(letras[ i ] == verifica[0])
                                                                         letras[ i ] = '-';
                                     printf("%c",letras[ i ]);
                                    
                 }
                
                 if(termina == tamanho){
                            printf("\n\n\n\nAeeeeeeeeeeeeeeee Aeeeeeeeeeeeeeee\n\n");    
                            printf("Uhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Voce Ganhou!!!\n");
                 break;    
                 }
                
                 if(erros == 1){
                            printf("\n\n\n\nLoseerrrrrrrr\n\n");    
                            printf("Uuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Perdedor!!!\n");
                            printf("A palavra selecionada era %s\n",selecionada);
                            printf("Ate minha avo sabia!\n");
                            printf("ALOCOOOOOOO\n\n");
                 break;
                 }
                
                 printf("\n\nDigite uma Letra: ");
                
                 verifica[0] = getch();
                
                 for(i=0;digitadas[ i ] != '{FONTE}';i++)
                 {           // Verifica se a letra ja foi digitada
                             if(digitadas[ i ] == verifica[0]){
                                            
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = getch();
                                            
                                                         if(verifica[0] == digitadas[ i ]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;
                             }                          
                 }
      
                 digitadas[z] = verifica[0];
                 z++;
                 errou = 1;    
                 for(i = 0;i < tamanho;i++){                            // Verifica se o cara digito uma letra que nao tem na palavra
                       if(selecionada[ i ] == verifica[0]){               // Se nao tiver letra na palavra incrementa um erro                      
                               correta[ i ] = verifica[0];
                               errou = 0;
                       }
                 }
                
                 if(errou)
                           erros--;
         }
     }
      
getch();
}


     
    void menu(){
  
   int x, aceita;    
   system("cls");
  
  do{
       system("cls");
       printf("Escolha uma das Opcoes para execucao do programa.\n");  
       printf("+------------------------------------------------------------------------------+");
       printf("|                          Bem Vindo ao Jogo Da Forca                          |");
       printf("|                                                                              |");
       printf("|1)Ler Manual Do Usuario.                                                      |");
       printf("|2)Criar Lista De Palavras.                                                    |");
       printf("|3)Apagar Arquivo.                                                             |");
       printf("|4)>>>>>>>>>>>>>Jogar.<<<<<<<<<<<<<<<<                                         |");
       printf("|5)Mostrar Creditos e Encerrar o Programa.                                     |");
       printf("|                                             Por: Jos%c Mario Silva Rosa Filho |",130);
       printf("+------------------------------------------------------------------------------+\n");
       scanf("%d",&x);
    }

    while(x < 1 || x > 5);
    
    switch(x){
              
          case 1:{
               manual();
               system("pause");
               menu();
          break;    
          }
          case 2:{
               cadastrapal();
               menu();
          break;
          }
          case 3:{
               erase();
               menu();
          break;
          }
          case 4:{
               lepal();
              
               if(leu || criou)
                           jogo();
                                
               else{
                   printf("Voce nao criou palavras e seu txt nao possui nenhuma!\n");
                   printf("Selecione a opcao 2 do menu!\n");
                   getch();
              }
              
               menu();
          break;
          }
          case 5:{
               //editos();
          break;
          }    
    
    }
}

Share this post


Link to post
Share on other sites
pmg

... o "joga" na função jogo aparece como Bool joga =1, errou;

No entanto no c, não reconhece booleanos..como faço??

Basicamente tens 3 opcoes:

1) actualiza o teu compilador para um que suporte C99 e substitui Bool por _Bool (ou faz o #include <stdbool.h> e substitui Bool por bool)

2) substitui Bool por int

3) faz um typedef para criar um nome novo para um tipo existente: typedef int Bool;

Eu escolheria a hipótese 2), mesmo tendo um compilador com suporte para C99.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mcosta

Pmg muito obrigado!!

o que fiz foi colocar onde estava boll alterei para int..pode ser certo??

mas agora executa mas não faz nada..

tipo pede Digite uma letra:

e depois digito uma..e nem aparece na tela

e logo de seguida diz:

essa letra ja foi digitada meu parcero

por gentileza digite outra e tente niovamente

e é sempre isto..

por favor preciso de ajuda!!

cumprimentos e obrigado!!

Share this post


Link to post
Share on other sites
pmg

Como o teu programa só funciona em Windows (por causa do fflush(stdin);) não o posso experimentar.

Além disso não tenho o header <conio.h> e o system("cls") no meu computador mete uma mensagem de erro no meio do output.

Compila com o nível máximo de warnings e tenta fazer compilações limpas: sem erros nem warnings.

Usa o "debugger" para te ajudar a descobrir porque é que o programa não faz o que tu querias que ele fizesse.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mcosta

podes analisar só esta parte??

porque não sei fazer isto que disseste..

quando executo..aparece este print mas ao caregar numa letra do teclado a mesma não aparece inscrita e dá logo o erro dos dois printfs seguintes:-((

printf("\n\nDigite uma Letra: ");
                
                 verifica[0] = getch();
                
                 for(i=0;digitadas[ i ] != '{FONTE}';i++)
                 {           // Verifica se a letra ja foi digitada
                             if(digitadas[ i ] == verifica[0]){
                                            
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = getch();
                                            
                                                         if(verifica[0] == digitadas[ i ]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;
                             }                          
                 }
      
                 digitadas[z] = verifica[0];
                 z++;
                 errou = 1;    
                 for(i = 0;i < tamanho;i++){                            // Verifica se o cara digito uma letra que nao tem na palavra
                       if(selecionada[ i ] == verifica[0]){               // Se nao tiver letra na palavra incrementa um erro                      
                               correta[ i ] = verifica[0];
                               errou = 0;
                       }

Share this post


Link to post
Share on other sites
mcosta

ok!!

alterei onde diz

 printf("\n\nDigite uma Letra: ");
                
                 verifica[0] = scanf(" %c", &num);//getch();
                
                 for(i=0;digitadas[ i ] != '{FONTE}';i++)

aqui ja aparece na tela a letra que coloco porque coloquei um scanf em vez do getch()..pk este erro??

mas depois um mais grave éntra neste ciclo e não sai daqui:-((:

alguem me ajuda!!

 if(digitadas[ i ] == verifica[0]){
                                            
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = getch();
                                            
                                                         if(verifica[0] == digitadas[ i ]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;

Share this post


Link to post
Share on other sites
HappyHippyHippo

teu o problema já foi discutido mais do que 100 vezes aqui no forum

acho melhor algum moderador criar um post só para explicar como ler do teclado.

problema:

!!! usar getch e/ou scanf !!!

o uso destas funções requer um conhecimento preciso do que acontece ao buffer de entrada.

por outras palavras : o que se escreve no buffer para que este seja interpretados por qualquer função de leitura é:

- "xpto\n"

é de lembrar que o caracter "return" encontrasse sempre no buffer de leitura !!!!

seja usada a função scanf ou o getch, o buffer de leitura nunca é inteiramente limpo após a inserção de dados no teclado, pois fica sempre alguma coisa sem ser lida.

temo-mos por exemplo este caso:

int i;
scanf("%d", &i);

o que acontece se o utilizador inserir no teclado a combinação de teclas: '3','4','a','\n'

é que os caracteres 3 e 4 serão removidos do buffer de entrada mas os caracteres 'a' e '\n' ficam pendentes prontos para serem lidos na proxima chamada da função de leitura. é por essa razão que a aplicação não para para pedir novos dados porque este já lá estão e serão lidos (sendo estes válidos ou não).

de notar que no caso anterior, mesmo sem inserir o caracter 'a', o caracter '\n' continua a existir no buffer e o mesmo acontece.

conclusão : não usar nenhuma destas funções !!!!

solução :

usar a função fgets que lê um conjunto de caracteres de um stream até encontrar o caracter '\n' removendo-o inclusive.

exemplo

ler um valor inteiro e um caracter o teclado (de uma vez só)

char buffer[256]; // array de caracteres auxiliar para guardar o que foi inserido pelo utilizador
int i = 0; // o valor que se pretende ler do teclado
char c = '\0'; // um segundo valor a ser lido do teclado
...
fgets[buffer, 256, stdin); // ler os dados da stream de entrada "stdin" para o array buffer de tamanho 256
sscanf(buffer, "%d%c", &i, &c); // ler os valores do array auxiliar

desta forma, o buffer de entrada é sempre correctamente lido/limpo

se o utilizador inserir a combinação de teclas : '3','4','a','\n'

a variável "i" terá o valor 34 e a variável "c" terá 'a'. o caractere '\n' será removido pela função fgets.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg

Estas a fazer programacao por tentativa e erro?

Nao é a maneira mais indicada ... mas por vezes funciona :D

Onde tens for(i=0;digitadas[ i ] != '{FONTE}';i++) alguma coisa esta mal, muito mal. As plicas delimitam caracteres; {FONTE} nao é um caracter; digitadas[ i ] é um caracter que vai ser sempre diferente duma coisa que nao é um caracter.


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mcosta

ok..

tas a dizer que onde tenho os scanf e os getch() para colocar

fgets ()..

tipo:onde tenho

verifica[0] = scanf(" %c", &num)

colocar:

 verifica[0] = fgets[buffer, 256, stdin);

e esses parametros como os declaro???

desculpa a minha ignorancia!!

e obrigado por tudo..

Share this post


Link to post
Share on other sites
HappyHippyHippo

lê novamente o meu post que está lá explicado como deves fazer ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mcosta

Ok.Happy vou ler novamente!!

mas viste o post do moderador..diz que está um erro grave...!!

já viste essa parte  do código??

sim e eu vi o fgets (buffer, 100, stdin)..não sei muito bem no meu caso qual vai ser o buffer

obrigados!!

Share this post


Link to post
Share on other sites
mcosta

Ok..tenho de declarar um array auxiliar!!

desculpa..

mas viste o comentario do moderador??

sim, eu é mesmo no desenrasque..

obrigado e diz algo sobre o comentario anterior!!

obrigado

Share this post


Link to post
Share on other sites
mcosta

já alterei.:-))

no entanto continua sem funcionar!!

acho que o problema está naquela comparação

aqui deixo o código todo da função:

void jogo(){
    
     system("cls");
     
     char buffer[256];
     char num;
    
     int i, gera_rand, erros = 8, tamanho, termina = 0, z = 0;
     int joga = 1, errou;
     char selecionada[25], verifica[1] = {""}, correta[25], digitadas[25] = {""};
     char letras[57] = {" a b c d e f g h i j k l m n o p q r s t u v w x y z 0"};
    
     srand(time(NULL));
    
     typedef struct Membros_Do_Carinha{     // Exemplo de Uso de estrutura para formaçao do boneco
    
             char cabeca[1];
             char tronco[1];
             char b_p[1];
             char p_b[1];
     }P;
    
    
     for(i=0;i<PAL;i++){
              
              if(strcmp(palavras[ i ],"") == 0 && i == 0){
                                        
                                        printf("Erro voce nao cadastrou nenhuma palavra!\n");
                                        printf("E seu forca.txt nao consta nenhuma palavra!\n");
                                        joga = 0;
                                        break;
              
              }
              
              else if(strcmp(palavras[ i ],"") == 0){
                   
                   printf("passei,,");
                                        
                                        gera_rand = i;
                                        break;                      
              }
                                                                                      
     }
    
     if(joga){ // Onde o jogo começa meu parceroooo!!!
            
             gera_rand = rand() % gera_rand;
            
             strcpy(selecionada,palavras[gera_rand]);
                        
             for(i=0;i<25;i++)
                            selecionada[ i ] = tolower(selecionada[ i ]);
            
             printf("A palavra seleciona e %s\n",selecionada);  
            
             tamanho = strlen(selecionada);
            
             P ERROS;
            
             ERROS.cabeca[1] = 'O';
             ERROS.tronco[1] = '|';
             ERROS.b_p[1] = '/';
             ERROS.p_b[1] = '\\';
            
             for(i = 0;i < tamanho;i++){
                         if(selecionada[ i ] == ' ')
                                           correta[ i ] = ' ';            
                         else
                             correta[ i ] = '_';
             }
             for(i = 0;i < tamanho;i++)
                         if(selecionada[ i ] == ' '){
                                                  tamanho++;
                                                  termina++;
                         }
             while(erros){
                          
                 system("cls");
                        
                 printf("\n");                        
                 printf("+--------------------+\n");
                 printf("|                    |\n");
                 printf("|                    %c\n",erros < 8 ? ERROS.cabeca[1] : ' ');
                 printf("|                   %c%c%c\n",erros < 6 ? ERROS.b_p[1] : ' ',erros < 7 ? ERROS.tronco[1] : ' ',erros < 5 ? ERROS.p_b[1] : ' ');
                 printf("|                    %c\n",erros < 4 ? ERROS.tronco[1] : ' ');
                 printf("|                   %c %c\n",erros < 3 ? ERROS.b_p[1] : ' ',erros < 2 ? ERROS.p_b[1] : ' ');
                 printf("|\n");      
                 printf("|\n");
                 printf("| ");
                
                 for(i = 0;i < tamanho;i++){
                       if(selecionada[ i ] == verifica[0]){                                      
                               correta[ i ] = verifica[0];
                               termina++;                                     //Faz o controle ' se termina for igual a tamanho entao a palavras esta correta e acaba o jogo...
                       }
                 }                  
                
                 for(i = 0;i < tamanho;i++){                                  // Imprime a palavra na tela
                       printf("%c ",correta[ i ]);
                 }
                
                 printf("\n\n");
                
                 for(i = 1;letras[ i ] != '0';i++){                             // Coloca       -      nas letras digitadas                                  
                                     if(letras[ i ] == verifica[0])
                                                                         letras[ i ] = '-';
                                     printf("%c",letras[ i ]);
                                    
                 }
                
                 if(termina == tamanho){
                            printf("\n\n\n\nAeeeeeeeeeeeeeeee Aeeeeeeeeeeeeeee\n\n");    
                            printf("Uhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Voce Ganhou!!!\n");
                 break;    
                 }
                
                 if(erros == 1){
                            printf("\n\n\n\nLoseerrrrrrrr\n\n");    
                            printf("Uuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Perdedor!!!\n");
                            printf("A palavra selecionada era %s\n",selecionada);
                            printf("Ate minha avo sabia!\n");
                            printf("ALOCOOOOOOO\n\n");
                 break;
                 }
                
                 printf("\n\nDigite uma Letra: ");
                
                 verifica[0] = fgets(buffer, 256, stdin);//getch();
                
                 for(i=0;digitadas[ i ] != '{FONTE}';i++)
                 {           // Verifica se a letra ja foi digitada
                             if(digitadas[ i ] == verifica[0]){
                                            
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = fgets(buffer, 256, stdin);//getch();
                                            
                                                         if(verifica[0] == digitadas[ i ]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = fgets(buffer, 256, stdin);//getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;
                             }                          
                 }
      
                 digitadas[z] = verifica[0];
                 z++;
                 errou = 1;    
                 for(i = 0;i < tamanho;i++){                            // Verifica se o cara digito uma letra que nao tem na palavra
                       if(selecionada[ i ] == verifica[0]){               // Se nao tiver letra na palavra incrementa um erro                      
                               correta[ i ] = verifica[0];
                               errou = 0;
                       }
                 }
                
                 if(errou)
                           erros--;
         }
     }
      
fgets(buffer, 256, stdin);
}

mas o erro deve estar nesta parte..porque nunca sai daqui.-((

printf("\n\nDigite uma Letra: ");
                
                 verifica[0] = fgets(buffer, 256, stdin);//getch();
                
                 for(i=0;digitadas[ i ] != '{FONTE}';i++)
                 {           // Verifica se a letra ja foi digitada
                             if(digitadas[ i ] == verifica[0]){
                                            
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = fgets(buffer, 256, stdin);//getch();
                                            
                                                         if(verifica[0] == digitadas[ i ]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = fgets(buffer, 256, stdin);//getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;

aguardo ajuda e desculpa por todo o incómodo!!

Share this post


Link to post
Share on other sites
HappyHippyHippo

leste o BEM o post que fiz ?!?!?

em nenhuma parte diz que a função fgets retorna o valor lido ....

lê novamente, porque é assim que se aprende


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mcosta

ok..

tens razao..

mas onde lei os dados e os valores..

não tou a perceber onde coloco o fgets e o sscanf

podes me explicar??

Share this post


Link to post
Share on other sites
HappyHippyHippo
char buffer[256];
char verifica = '\0';
...
fgets[buffer, 256, stdin);
sscanf(buffer, "%c", &verifica);
...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pmg

mcosta: eu estou a tirar o curso "Computer Science 101".

Ainda estas a tempo de te inscrever.

Aconselho-te vivamente (se souberes falar ingles).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mcosta

é assim:

mas estoura o programa mas nao da erro.. entra em ciclo infinito!!

void jogo(){
    
     system("cls");
     
     char buffer[256];
     int e = 0; // o valor que se pretende ler do teclado
     char c = '\0';
     char num;
    
     int i, gera_rand, erros = 8, tamanho, termina = 0, z = 0;
     int joga = 1, errou;
     char selecionada[25], verifica[1] = {""}, correta[25], digitadas[25] = {""};
     char letras[57] = {" a b c d e f g h i j k l m n o p q r s t u v w x y z 0"};
    
     srand(time(NULL));
    
     typedef struct Membros_Do_Carinha{     // Exemplo de Uso de estrutura para formaçao do boneco
    
             char cabeca[1];
             char tronco[1];
             char b_p[1];
             char p_b[1];
     }P;
    
    
     for(i=0;i<PAL;i++){
              
              if(strcmp(palavras[ i ],"") == 0 && i == 0){
                                        
                                        printf("Erro voce nao cadastrou nenhuma palavra!\n");
                                        printf("E seu forca.txt nao consta nenhuma palavra!\n");
                                        joga = 0;
                                        break;
              
              }
              
              else if(strcmp(palavras[ i ],"") == 0){
                   
                   printf("passei,,");
                                        
                                        gera_rand = i;
                                        break;                      
              }
                                                                                      
     }
    
     if(joga){ // Onde o jogo começa meu parceroooo!!!
            
             gera_rand = rand() % gera_rand;
            
             strcpy(selecionada,palavras[gera_rand]);
                        
             for(i=0;i<25;i++)
                            selecionada[ i ] = tolower(selecionada[ i ]);
            
             printf("A palavra seleciona e %s\n",selecionada);  
            
             tamanho = strlen(selecionada);
            
             P ERROS;
            
             ERROS.cabeca[1] = 'O';
             ERROS.tronco[1] = '|';
             ERROS.b_p[1] = '/';
             ERROS.p_b[1] = '\\';
            
             for(i = 0;i < tamanho;i++){
                         if(selecionada[ i ] == ' ')
                                           correta[ i ] = ' ';            
                         else
                             correta[ i ] = '_';
             }
             for(i = 0;i < tamanho;i++)
                         if(selecionada[ i ] == ' '){
                                                  tamanho++;
                                                  termina++;
                         }
             while(erros){
                          
                 system("cls");
                        
                 printf("\n");                        
                 printf("+--------------------+\n");
                 printf("|                    |\n");
                 printf("|                    %c\n",erros < 8 ? ERROS.cabeca[1] : ' ');
                 printf("|                   %c%c%c\n",erros < 6 ? ERROS.b_p[1] : ' ',erros < 7 ? ERROS.tronco[1] : ' ',erros < 5 ? ERROS.p_b[1] : ' ');
                 printf("|                    %c\n",erros < 4 ? ERROS.tronco[1] : ' ');
                 printf("|                   %c %c\n",erros < 3 ? ERROS.b_p[1] : ' ',erros < 2 ? ERROS.p_b[1] : ' ');
                 printf("|\n");      
                 printf("|\n");
                 printf("| ");
                
                 for(i = 0;i < tamanho;i++){
                       if(selecionada[ i ] == verifica[0]){                                      
                               correta[ i ] = verifica[0];
                               termina++;                                     //Faz o controle ' se termina for igual a tamanho entao a palavras esta correta e acaba o jogo...
                       }
                 }                  
                
                 for(i = 0;i < tamanho;i++){                                  // Imprime a palavra na tela
                       printf("%c ",correta[ i ]);
                 }
                
                 printf("\n\n");
                
                 for(i = 1;letras[ i ] != '0';i++){                             // Coloca       -      nas letras digitadas                                  
                                     if(letras[ i ] == verifica[0])
                                                                         letras[ i ] = '-';
                                     printf("%c",letras[ i ]);
                                    
                 }
                
                 if(termina == tamanho){
                            printf("\n\n\n\nAeeeeeeeeeeeeeeee Aeeeeeeeeeeeeeee\n\n");    
                            printf("Uhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Voce Ganhou!!!\n");
                 break;    
                 }
                
                 if(erros == 1){
                            printf("\n\n\n\nLoseerrrrrrrr\n\n");    
                            printf("Uuuuuuuuuuuuuuuuuuuuuu\n");
                            printf("Perdedor!!!\n");
                            printf("A palavra selecionada era %s\n",selecionada);
                            printf("Ate minha avo sabia!\n");
                            printf("ALOCOOOOOOO\n\n");
                 break;
                 }
                
                 printf("\n\nDigite uma Letra: ");
                
                 verifica[0] = fgets(buffer, 256, stdin);//getch();
                
                 for(i=0;digitadas[ i ] != '{FONTE}';i++)
                 {           // Verifica se a letra ja foi digitada
                             if(digitadas[ i ] == verifica[0]){
                                            
                                             printf("\nEssa letra ja foi digitada meu parcero!\n");
                                             printf("Por Gentileza digite outra e tente nao cometer o mesmo erro 2 vezes.\n");
                                             verifica[0] = sscanf(buffer, "%d%c", &e, &c);//getch();
                                            
                                                         if(verifica[0] == digitadas[ i ]){  // Se caso o cara volte a digitar a mesma letra que a anterior ele diminui 1 em i e manda continuar o FOR
                                                                        verifica[0] = sscanf(buffer, "%d%c", &e, &c);//getch();
                                                                        i--;
                                                                        continue;
                                                                        }
                                             break;
                             }                          
                 }
      
                 digitadas[z] = verifica[0];
                 z++;
                 errou = 1;    
                 for(i = 0;i < tamanho;i++){                            // Verifica se o cara digito uma letra que nao tem na palavra
                       if(selecionada[ i ] == verifica[0]){               // Se nao tiver letra na palavra incrementa um erro                      
                               correta[ i ] = verifica[0];
                               errou = 0;
                       }
                 }
                
                 if(errou)
                           erros--;
         }
     }
      
sscanf(buffer, "%d%c", &e, &c);
}

   

Share this post


Link to post
Share on other sites
mcosta

Olá Happy, desculpa incomodar!!

agora está bem colocado o fgets e o sscanf??

mas agora entra num ciclo infinito:

eu acho que é esta comparação mas não sei como fazer:

for(i=0;digitadas[ i ] != '{FONTE}';i++)

Share this post


Link to post
Share on other sites
mcosta

:-):-)

queria que verificasse se a letra já tinha sido digitada...

assim não dá pois n??

Share this post


Link to post
Share on other sites
mcosta

em vez de:

for(i=0;digitadas[i] != '{FONTE}';i++){  

qnao deveria ser mais tipo:

for(i=0;digitadas[ i ] != verifica[0];i++)

mas assim tambem não funciona...quer dizer funciona..mas monta o boneco..nunca valia a verdade!!

aguardo a tua respposta!!

mais uma vez muito obrigado!!

Share this post


Link to post
Share on other sites
mcosta

por favor alguém me ajuda!!

preciso de resolver esse erro..

grato a todos...

aguardo ajuda..

obrigado a todos

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
Sign in to follow this  

×
×
  • 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.