Ir ao conteúdo

Posts recomendados

Postado

bom dia pessoal,

estou com um probleminha neste codigo, ele deveria pega gerar uma palavra aleatoria através de uma lista no formato txt.

exemplo da lista: 

mesa

carro 

casa

etc..

antes estava gerando só a primeira linha do arquivo, porém fiz alguma alteração que o codigo só fica num loop infinito mostrando a mensagem lista não encontrada, mas a lista existe, por favor me ajudem, desde já agradeço..

codigo:

int main(){
    int indexPalavra; //Variável do controle do index da palavra
    int i, j; //Variáveis de controle de loop
    FILE *fp; //Ponteiro de arquivo
    char palavra[100]; //Varíavel pra armazenar a palavra
    fp = fopen("adicionar_conseq.txt", "r"); //Abre o arquivo
    if(fp) //Se arquivo existir
        { srand(time(NULL)); //Pega a semente do número aleatório
        indexPalavra = frand()%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("\nLista nao encontrada.");
            fclose(fp); //destrói o ponteiro
             //Fecha o programa com sucesso
            }    //Basta ler a palavra agora
            i = -1;
            do    {
                i++;palavra = fgetc(fp); //Lê letra por letra
                if(palavra == '\0') //Se caractere lido for de próxima linha
                   break; //Terminou a palavra
            } while(sizeof(palavra)); //Enquanto não fim do arquivo
                palavra = '\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;
} 

 

  • Curtir 1
Postado
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <locale>

struct InfoLinha
{
    char  nome[1024];
};

int main()
{
    setlocale(LC_ALL, "Portuguese");
    srand(time(NULL));

    FILE* arquivo = fopen("lista.txt", "r");

    // Verifica se o arquivo foi aberto com sucesso
    if (arquivo == NULL)
    {
        printf("Falha ao abrir o arquivo. Código do erro: %d\n", GetLastError());
        getchar();
        return 1;
    }

    size_t numLinhas = 0, tamanhoEstruturaArray = 10;

    // Aloca na memória inicialmente 10 posições(tamanhoEstruturaArray) para a estrutura que vai armazenar os nomes
    InfoLinha* linha = (InfoLinha*)malloc(tamanhoEstruturaArray);
    
    char nomePalavraAtual[1024] = { 0 };

    while (fscanf(arquivo, "%s", nomePalavraAtual) != EOF)
    {
        // Para caso de ter mais de 10 linhas, é necessário realocar, para evitar problemas de estouros de memória
        if (numLinhas > tamanhoEstruturaArray - 1)
        {
            tamanhoEstruturaArray *= 2;
            linha = (InfoLinha*)realloc(linha, tamanhoEstruturaArray);
        }

        // Copia o nome da linha atual para a posição atual da estrutura linha
        strcpy(linha[numLinhas].nome, nomePalavraAtual);
        
        // Incrementa o número de linhas
        numLinhas++;
    }

    printf("Número de linhas: %d\n", numLinhas);

    // Sorteando o número da linha de forma aleatória
    size_t numSorteado = rand() % numLinhas;

    printf("Palavra sorteada: %s\n", linha[numSorteado].nome);

    // Libera a memória que foi alocada para a estrutura
    free(linha);
  
    // Fecha o arquivo
    fclose(arquivo);

    return 0;
}

É um pouco parecida com a lógica do @vangodp, a cada vez que chegar no final da linha(\n) vai incrementar o número de linhas em + 1.
 

  • Curtir 1
Postado

obrigado amigo @vangodp,

vou dar uma estuda, para melhora minha manipulação de arquivo, vou fazer as alterações aqui no meu codgo e aviso se deu certo, obrigado..

adicionado 1 minuto depois

obrigado @cyer vou analisa o seu codigo tmb e vou fazer as alterações no meu, obrigado..

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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