mcosta Posted April 24, 2012 at 03:21 PM Report #451131 Posted April 24, 2012 at 03:21 PM 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; } } }
pmg Posted April 24, 2012 at 03:32 PM Report #451134 Posted April 24, 2012 at 03:32 PM ... 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!
mcosta Posted April 24, 2012 at 03:46 PM Author Report #451140 Posted April 24, 2012 at 03:46 PM 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!!
pmg Posted April 24, 2012 at 03:52 PM Report #451142 Posted April 24, 2012 at 03:52 PM 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!
mcosta Posted April 24, 2012 at 04:00 PM Author Report #451144 Posted April 24, 2012 at 04:00 PM 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; }
mcosta Posted April 24, 2012 at 04:12 PM Author Report #451149 Posted April 24, 2012 at 04:12 PM 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;
HappyHippyHippo Posted April 24, 2012 at 05:16 PM Report #451175 Posted April 24, 2012 at 05:16 PM 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 Portugol Plus
pmg Posted April 24, 2012 at 05:20 PM Report #451176 Posted April 24, 2012 at 05:20 PM Estas a fazer programacao por tentativa e erro? Nao é a maneira mais indicada ... mas por vezes funciona 😄 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!
mcosta Posted April 24, 2012 at 05:24 PM Author Report #451181 Posted April 24, 2012 at 05:24 PM 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..
HappyHippyHippo Posted April 24, 2012 at 05:27 PM Report #451182 Posted April 24, 2012 at 05:27 PM lê novamente o meu post que está lá explicado como deves fazer ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
mcosta Posted April 24, 2012 at 05:32 PM Author Report #451184 Posted April 24, 2012 at 05:32 PM 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!!
mcosta Posted April 24, 2012 at 05:34 PM Author Report #451186 Posted April 24, 2012 at 05:34 PM 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
mcosta Posted April 24, 2012 at 05:42 PM Author Report #451193 Posted April 24, 2012 at 05:42 PM 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!!
HappyHippyHippo Posted April 24, 2012 at 05:48 PM Report #451197 Posted April 24, 2012 at 05:48 PM 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 Portugol Plus
mcosta Posted April 24, 2012 at 05:51 PM Author Report #451202 Posted April 24, 2012 at 05:51 PM 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??
HappyHippyHippo Posted April 24, 2012 at 05:54 PM Report #451203 Posted April 24, 2012 at 05:54 PM char buffer[256]; char verifica = '\0'; ... fgets[buffer, 256, stdin); sscanf(buffer, "%c", &verifica); ... IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted April 24, 2012 at 05:55 PM Report #451206 Posted April 24, 2012 at 05:55 PM 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!
mcosta Posted April 24, 2012 at 05:59 PM Author Report #451209 Posted April 24, 2012 at 05:59 PM é 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); }
mcosta Posted April 24, 2012 at 06:16 PM Author Report #451210 Posted April 24, 2012 at 06:16 PM 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++)
HappyHippyHippo Posted April 24, 2012 at 06:28 PM Report #451211 Posted April 24, 2012 at 06:28 PM diz-me tu que o esse ciclo deveria fazer IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now