Ir para conteúdo
Fórum Script Brasil
  • 0

Pesquisando Valores em um arquivo TXT


Vinicius Oliveira Gundim

Pergunta

3 respostass a esta questão

Posts Recomendados

  • 0

Já está dando entrada nos dados, gravando no arquivo agora como vou fazer???

Segue o codigoo

/******************************************Bibliotecas*************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/*****************************************Definições***************************************/
#define TAM_STRING 100
#define SEMENTE 500


/*****************************************Estruturas***************************************/
//Estrutura utilizada para armazenaros dados de uma aposta
typedef struct Aposta
{
int iCodigoAposta;
char strEstado[3];
char strCidade[50];
int vetNumeros[6];
struct Aposta* ptProxima;
}stAposta;

//Estrutura utizada para definir uma lista de apostas
typedef struct Lista
{
stAposta* ptInicio;
stAposta* ptFim;
int iTotal;
}stLista;


/****************************************Protótipos das funções****************************/
void mostraMenu(void);
void sorteiaNumeros(int*);
int jaSorteado(int*, int);
void leArquivo(stLista*);
stAposta* criaAposta(char *);
void insereApostaLista(stLista*, stAposta*);
void geraRelatorio(stLista*, int*);
void liberaMemoria(stLista*);

/*------------------------------------------------------------------------------------------
* Nome da função: main
* Descrição: Função principal de um programa em C
* Parâmetros: int, char**
* Retorno: int
------------------------------------------------------------------------------------------*/
int main(int argc, char* argv[])
{
//Declaração das variáveis utilizadas
stLista listaApostas;
int iOpcao = 0;
int vtNumerosSorteados[6];

//Inicializando variáveis ponteiros da lista
listaApostas.ptInicio = NULL;
listaApostas.ptFim = NULL;
listaApostas.iTotal = 0;

//Configuração da semente utilizada no sorteio dos números
srand(SEMENTE);

//Loop do Menu
while(iOpcao!=4)
{
//Mosta o menu principal
mostraMenu();

//Le a opcao
scanf("%d",&iOpcao);


//-------------------------------------------------------------------------------------------------------------//
//PARTE QUE EU IMPLEMENTEI//
//CHAMA A FUNÇÃO DE ENTRADA DE DADOS E LEITURA DA APOSTA, ENTER DUAS VEZES GRAVA OS DADOS NO ARQUIVO//
if (iOpcao == 1)
{
system("cls");

printf("|------------------------------------------------UF/Cidade;aposta,aposta----|");
printf("\n|---------------------------------------------------------------------------|\n");
printf("|Insira os Dados e Depois a Aposta -- Ex:GO/Crixas;02,04,09,10,11,13--------|");
printf("\n|---------------------------------------------------------------------------|");
printf("\n------------OU DIGITE 1 PARA VOLTAR PARA O MENU----------------------------|\n\n");
FILE *fptr;
char string[50];
int iOpcao1 = 0;

fptr=fopen("dados.txt","a"); //abre ou cria arquivo p/ atualizar
scanf("%d",&iOpcao1);

if (iOpcao1 == 1)
{
system("cls");
mostraMenu();
scanf("%d",&iOpcao);

}
else if (iOpcao1 != 2){
while(strlen(gets(string))>0){
fputs(string,fptr);
fputs("\n",fptr); //caracter de nova linha
}//fim do while
}
fclose(fptr);
}
//------------------------------------------------------------------------------------------------------------//


else if (iOpcao == 2)
{
//Chama a função que realiza o sorteio dos números
sorteiaNumeros(vtNumerosSorteados);
}
else if (iOpcao == 3)
{
//Chama a função que gera o arquivo de resultados
geraRelatorio(&listaApostas, vtNumerosSorteados);
}
}

//Chama a função que Libera a memória alocada dinamicamente
liberaMemoria(&listaApostas);

return 0;
}


/**************************************Implementação das funções****************************/
/*------------------------------------------------------------------------------------------
* Nome da função: mostraMenu()
* Descrição: esta função imprime o menu na tela
* Parâmetros: Nenhum
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void mostraMenu(void)
{
printf("\n |------------------------------------------------|\n");
printf(" | |\n");
printf(" | LOTERIAS TADS |\n");
printf(" | |\n");
printf(" |------------------------------------------------|\n");
printf(" | |\n");
printf(" | <1> Ler Apostas |\n");
printf(" | <2> Sortear numeros |\n");
printf(" | <3> Gerar relatorio do sorteio |\n");
printf(" | <4> Sair |\n");
printf(" | |\n");
printf(" |------------------------------------------------|\n\n");
printf("\t\tOpcao: ");
}

/*------------------------------------------------------------------------------------------
* Nome da função: leArquivo()
* Descrição: esta função realiza a leitura das apostas no arquivo e cria a lista de apostas
* Parâmetros: stLista*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void leArquivo(stLista* ptLista)
{
//Declara a string responsável pelo armazenamento da linha lida do arquivo
char strLinha[TAM_STRING];

//Variável temporária para uma aposta
stAposta* ptTmpAposta = NULL;

//Realiza a abertura do arquivo
FILE* ptArquivo = fopen("apostas.txt","rt");

//Testa se o arquivo foi aberto com sucesso
if (!ptArquivo)
{
printf("Arquivo de entrada não pode ser aberto\n");
return;
}

//Enquanto não for final de arquivo
while(!feof(ptArquivo))
{
//Realiza a leitura de uma linha do arquivo
fgets(strLinha,TAM_STRING,ptArquivo);

//Extrai os dados da String lida do arquivo e preenche a estrutura da aposta
ptTmpAposta = criaAposta(strLinha);

//Insere uma aposta na lista dinâmica
insereApostaLista(ptLista, ptTmpAposta);

//Incrementa o total da apostas da lista
ptLista->iTotal++;
}

//Fecha o arquivo
fclose(ptArquivo);

//Anula ponteiroS locais
ptTmpAposta = NULL;
ptArquivo = NULL;
}

/*------------------------------------------------------------------------------------------
* Nome da função: criaAposta()
* Descrição: esta função retira os dados de uma linha do arquivo e cria uma aposta
* Parâmetros: char*
* Retorno: stAposta*
------------------------------------------------------------------------------------------*/
stAposta* criaAposta(char* strLinha)
{
//Declara um ponteiro para stAposta e variável auxiliar
stAposta* ptTempAposta = NULL;
int iIndice = 0;

//Aloca memória para a estrutura e inicializa o ponteiro
ptTempAposta = (stAposta*)malloc(sizeof(stAposta));

//Testa se a memória foi alocada
if (!ptTempAposta)
{
printf("não foi possivel alocar a memoria");
exit(1);
}

//Anula o ponteiro da estrutura
ptTempAposta->ptProxima = NULL;

//Quebra a string em tokens e atribui os valores para a estrutura
ptTempAposta->iCodigoAposta = atoi(strtok(strLinha,";,/"));
strcpy(ptTempAposta->strEstado,strtok(NULL,";,/"));
strcpy(ptTempAposta->strCidade,strtok(NULL,";,/"));

//Preenche o vetor de números
for (iIndice=0; iIndice<6; iIndice++)
{
ptTempAposta->vetNumeros[iIndice] = atoi(strtok(NULL,";,/"));
}

//Retorna a estrutura preenchida
return ptTempAposta;
}

/*------------------------------------------------------------------------------------------
* Nome da função: insereApostaLista()
* Descrição: esta função insere uma nova aposta na lista
* Parâmetros: stLista*, stAposta*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void insereApostaLista(stLista* ptLista, stAposta* ptAposta)
{
/*
system("cls");
//Implemente aqui
printf("|------------------------------------------------UF/Cidade;aposta,aposta----|");
printf("\n|---------------------------------------------------------------------------|\n");
printf("|Insira os Dados e Depois a Aposta -- Ex:GO/Crixas;02,04,09,10,11,13--------|");
printf("\n|---------------------------------------------------------------------------|");
printf("\n------------OU DIGITE 1 PARA VOLTAR PARA O MENU----------------------------|\n\n");
FILE *fptr;
char string[50];
int iOpcao1 = 0;

fptr=fopen("dados.txt","a"); //abre ou cria arquivo p/ atualizar
scanf("%d",&iOpcao1);

if (iOpcao1 == 1)
{
system("cls");
mostraMenu();
scanf("%d",&iOpcao1);

}
else if (iOpcao1 != 2){
while(strlen(gets(string))>0){
fputs(string,fptr);
fputs("\n",fptr); //caracter de nova linha
}//fim do while
}
fclose(fptr);


*/

}

/*------------------------------------------------------------------------------------------
* Nome da função: sorteiaNumeros()
* Descrição: esta função sorteia 6 numeros entre 1 e 20
* Parâmetros: int*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void sorteiaNumeros(int* ptVetor)
{
//Variaveis locais
int iIndice = 0, iPosicao = 0, iAux = 0;

//Realiza o sorteio
for (iIndice=0; iIndice<6; iIndice++)
{
iAux = 1+rand()%20;

//Numero sorteado já existe no vetor?
while(jaSorteado(ptVetor,iAux))
{
iAux = 1+rand()%20;
}

//Atribui o valor sorteado
ptVetor[iIndice] = iAux;
}

//Ordena os números do vetor (Bubble sort)
for (iIndice=0; iIndice<6; iIndice++)
{
for (iPosicao=0; iPosicao<5-iIndice; iPosicao++)
{
if (ptVetor[iPosicao]>ptVetor[iPosicao+1])
{
iAux = ptVetor[iPosicao];
ptVetor[iPosicao] = ptVetor[iPosicao+1];
ptVetor[iPosicao+1] = iAux;
}
}
}

//Imprime numeros na tela
for (iIndice=0; iIndice<6; iIndice++)
{
printf("%d ",ptVetor[iIndice]);
}
}

/*------------------------------------------------------------------------------------------
* Nome da função: jaSorteado()
* Descrição: verifica se um número já está contido no vetor de números sorteados ou não
* Parâmetros: int*, int
* Retorno: int
------------------------------------------------------------------------------------------*/
int jaSorteado(int* ptVetor, int iNumero)
{
//Variáveis locais
int iIndice=0;

//Passa pelo vetor verificando
for (iIndice=0; iIndice<6; iIndice++)
{
if (ptVetor[iIndice] == iNumero)
{
return 1;
}
}

return 0;
}

/*------------------------------------------------------------------------------------------
* Nome da função: geraRelatorio()
* Descrição: esta função cria um arquivo contendo um relatorio com os resultado obtidos
* Parâmetros: stLista*, int*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void geraRelatorio(stLista* ptLista, int* ptVetor)
{
//Implemente aqui
}

/*------------------------------------------------------------------------------------------
* Nome da função: liberaMemoria()
* Descrição: esta função libera a memória alocada dinamicamente para as apostas da lista
* Parâmetros: stLista*
* Retorno: Nenhum
------------------------------------------------------------------------------------------*/
void liberaMemoria(stLista* ptLista)
{
//Variável temporária
stAposta* ptTemp = NULL;

//Verifica se a lista está vazia
if (!ptLista || !ptLista->ptInicio)
{
return;
}

//Desaloca todos os nós da lista
while (ptLista->ptInicio != NULL)
{
ptTemp = ptLista->ptInicio;
ptLista->ptInicio = ptLista->ptInicio->ptProxima;
free(ptTemp);
}

//Anula ponteiros
ptLista->ptInicio = NULL;
ptLista->ptFim = NULL;
ptTemp = NULL;
}[/codebox]

Editado por Durub
Adicionar tags code [Durub]
Link para o comentário
Compartilhar em outros sites

  • 0

Deixa eu ver se entendi: você tá fazendo um programa de apostas, e que dado um número sorteado o programa deve mostrar quem ganhou?

Se for assim você faz uma função semelhante aquela leArquivo(), que leia o arquivo e guarde cada aposta lida em uma estrutura temporária, e com um for compare cada número da aposta com o número sorteado:

...
int bingo = 1;

//Enquanto não for final de arquivo
while(!feof(ptArquivo))
{
     //Realiza a leitura de uma linha do arquivo
     fgets(strLinha,TAM_STRING,ptArquivo);

     //Extrai os dados da String lida do arquivo e preenche a estrutura da aposta
     ptTmpAposta = criaAposta(strLinha);
    
     for(i = 0; i < 6; i++)
     {
        if( ptTmpAposta->vetNumeros[i] != NumeroSorteado[i])
        {
            bingo = 0; // Se um número diferir bingo é zero
            break;
        }
     }
    if(bingo == 1) printf("Apostador: %d Ganhou!!!\n", ptTmpAposta->iCodigoAposta);
}
...

Espero que seja isso. Qualquer coisa posta ai.

Editado por RonaldoRG
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...