Ir ao conteúdo
  • Cadastre-se

Ajuda, leitura de arquivo(texto) de forma aleatória.


Ir à solução Resolvido por Rafael Domingues Corrêa,

Posts recomendados

PRIMEIRO : Como eu posso pegar em um arquivo .txt uma palavra aleatoria e fazer lêr no meu jogo da forca.

SEGUNDO: Estou precisando de ajuda para resolver o problema do meu código, alguem pode me da alguma dica ou ajuda?

De agora, agradeço sua atenção.

Segue em baixo o código da forca. OBS: crie também um arquivo .txt com algumas palavras, para lê-las aleatóriamente.

 

# include <stdio.h>
# include <stdlib.h>
# include <string.h>
main(){
char nome[10],                   
tentd[1],                     
palavra[20],                 
espaco[20],                  
teste,                       
aux=0,                        
tam,
*result;
int i,                           
chances,
ganhou;                        
tentd[0]='s';
FILE *fp;
fp=fopen("lista.txt","r");
result=fgets(palavra,100,fp);
chances=6;
ganhou=0;
tam=strlen(palavra);


for(i=0;i<tam;i++)
    espaco='_';

system("cls");
printf("><><><><><><><><><><><><><>JOGO DA FORCA<><><><><><><><><><><><><><>\n");   
while(tentd[0]!='n' ){
  printf("Escreva o nome do jogador! \n");
  scanf("%s",&nome);
   while(chances!=0 || aux==1 ){
    aux=0;
    system("cls");
    printf("O jogador(a): %s\n",nome);
    printf("Chance: %d ganhou: %d",chances,ganhou);
    printf("\n  ÉÍÍÍÍÍÍÍÍÍÍÍ»");
    printf("\n  º           º");
    printf("\n  º           Ê");

    if(chances<=5){
    printf("\n  º           |");
    }

    if(chances<=4){
    printf("\n  º          (xx)  ");
    }

    if(chances<=3){
    printf("\n  º         /| |\\   ");
    }

    if(chances<=2){
    printf("\n  º       /  | |  \\   ");
    }

    if(chances<=1){
    printf(" \n  º         /  \\      ");
    }

    if(chances<=0){
    printf(" \n º        /     \\      ");
    }    

    printf("\n  º");
    printf("\n  º");
    printf("\n  Ê\n");
    for(i=0;i<tam;i++){
    printf("%c ",espaco);
    }
printf("\n");

  setbuf(stdin,NULL);
  printf("Digite uma letra! \n");
  scanf("%c",&teste);
    for(i=0;i<tam;i++){
        if(teste==palavra){
            espaco=teste;
            aux=1;
        }
    }
    if(aux==0){
        chances--;
    }
    else{
        ganhou++;
    }

   }

if(chances==0){
    setbuf(stdin,NULL);
    system("cls");
    printf("voce PERDEUUUU! \n");
    printf("Deseja jogar novamente? 's' ou 'n' \n");
    scanf("%c",tentd[0]);
    break;
}
if(ganhou==2){
    setbuf(stdin,NULL);
    system("cls");
    printf("voce GANHOUUUU! \n");
    printf("Deseja jogar novamente? 's' ou 'n' \n");
    scanf("%c",tentd[0]);    
}

}
      fclose(fp);
      system("pause");

}

Link para o comentário
Compartilhar em outros sites

Olá!

 

 

Olha sou Iniciante em C e acabei de me cadastrar no forum, então me desculpem se cometer algum equivoco . . .

 

Não dei uma boa olhada no seu codigo, então acho que não vou ser muito util, mas acho que você poderia ler todas as palavras do arquivo e armazenar uma a uma em um vetor de strings, e utilizando a função rand() combinada com "srand" - ( para gerar uma semente mais aleatoria ), aleatoriamente escolher um dos indices deste vetor, que conteria uma palavra qualquer, não sei se é o mais adequado para você mas já funcionou muito bem para mim em um projeto meu.

 

Alem, disso acho que seria mais adequado pelo seu fclose(fp); pois ao fazer como lhe disse todas as palavras do arquivo seriam carregadas para o vetor e você poderia fechar o arquivo tão logo isto acontecesse, e não no final de execução do seu programa.

 

Bom só posso ir ate aqui . . .

 

 

Espero ter Ajudado ! ! !

Link para o comentário
Compartilhar em outros sites

Olá!

 

 

Olha sou Iniciante em C e acabei de me cadastrar no forum, então me desculpem se cometer algum equivoco . . .

 

Não dei uma boa olhada no seu codigo, então acho que não vou ser muito util, mas acho que você poderia ler todas as palavras do arquivo e armazenar uma a uma em um vetor de strings, e utilizando a função rand() combinada com "srand" - ( para gerar uma semente mais aleatoria ), aleatoriamente escolher um dos indices deste vetor, que conteria uma palavra qualquer, não sei se é o mais adequado para você mas já funcionou muito bem para mim em um projeto meu.

 

Alem, disso acho que seria mais adequado pelo seu fclose(fp); pois ao fazer como lhe disse todas as palavras do arquivo seriam carregadas para o vetor e você poderia fechar o arquivo tão logo isto acontecesse, e não no final de execução do seu programa.

 

Bom só posso ir ate aqui . . .

 

 

Espero ter Ajudado ! ! !

Cara, valeu por ter lido meu post.

Assim, esse programa é um trabalho que meu professor pediu. Ai ele falou que queria q a gente usa-se um arquivo modo texto com 100 palalvras salvas dentro para ser usado na forca. Mas o problema é que n sei fazer que o programa pegue palavras aleatorias no arquivo .txt.

Mas valeu viu cara.

Link para o comentário
Compartilhar em outros sites

  • Solução

Estude esse código que escrevi para você ler uma palavra apenas direto do arquivo.

#include <stdio.h>#include <stdlib.h>#include <time.h>#define NUM_PALAVRAS 6 //Define o número de palavras no arquivoint main(){    int indexPalavra, //Variável do controle do index da palavra    i, j; //Variáveis de controle de loop    FILE *fp; //Ponteiro de arquivo    char palavra[100]; //Varíavel pra armazenar a palavra    fp = fopen("lista.txt", "r"); //Abre o arquivo    if(fp) //Se arquivo existir    {        srand(time(NULL)); //Pega a semente do número randômico        indexPalavra = rand()%NUM_PALAVRAS; //Gera o número da palavra (index)        for(i=0, j=0; j<indexPalavra; i++) //Enquanto não achar o index        {            if(fgetc(fp) == '\n') //Se achar próxima palavra                j++; //Passa para o próximo index;            /** Enquanto isso o ponteiro 'fp' armazena em si mesmo a posição do arquivo            que é navegada por 'fgetc()'. A cada consulta de caractere a posição do arquivo é passada pra frente **/        }    }    else //Se não achar arqquivo    {        printf("Lista nao encontrada.\n");        fclose(fp); //destrói o ponteiro        return 0; //Fecha o programa com sucesso    }    //Basta ler a palavra agora    i = -1;    do    {        i++;        palavra[i] = fgetc(fp); //Lê letra por letra        if(palavra[i] == '\n') //Se caractere lido for de próxima linha            break; //Terminou a palavra    } while(palavra[i] != EOF); //Enquanto não fim do arquivo    palavra[i] = '\0'; //Substitui o último caractere da palavra para indicar fim de frase    //Feche o arquivo    fclose(fp);    //Daqui pra frente você implementa o jogo como quiser    printf("Palavra: %s\n", palavra);    return 0; //Fecha o programa com sucesso}

Repare que o arquivo é  lido caractere por caractere. O index é definido por cada nova linha (o caractere '\n').

Espero que ajude, Falou.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!