Jump to content
thinkabout

Comparar chave introduzida pelo o utilizador com bd (txt) - Totoloto

Recommended Posts

thinkabout

Boas Pessoal,

Não estou a ver como vou fazer o ciclo para ele ir lendo cada uma das chaves e depois como usar o EOF para saber que cheguei ao fim ao fim da bd.

Ele já me compara a primeira chave.

totoloto.txt

12 45 4 2 37

13 46 5 3 38

14 47 6 4 39

15 48 7 5 40

16 49 6 41

17 50 9 7 42

18 51 10 8 43

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

/*
Ex6.
O ficheiro “totoloto.txt” contém todas as combinações que saíram desde que o jogo do
totoloto começou. 

Desenvolva um programa que leia do teclado a chave em que um jogador
apostou e a compare com cada uma das chaves armazenadas no ficheiro, escrevendo quantos
números comuns existem para cada chave.
*/

int main(int argc, const char * argv[])
{
   int i,j,nrcomum=0;
   int chave[5],chavebd[5];
   FILE *bd; // base de dados a onde esta a chave

   /* Testar a Linha de Comando */
   if (argc!=2)
   {
       printf("Sintaxe: \n\n%s Falta o nome da base de dados \n\n",argv[0]);
       exit(1); /*Termina o Programa*/
   }

   // Vou abrir a base de dados. 
   if ( (bd=fopen(argv[1],"r"))== NULL )
   {
       printf("Erro de abertura do ficheiro\n");
       exit(2);
   }

   puts("Introduzda a chave do totoloto");
   for (i = 0; i < 5; i++)
   {
       scanf(" %d", &chave[i]);
   }

   fflush(stdin);



   fscanf(bd,"%d %d %d %d %d",&chavebd[0], &chavebd[1],&chavebd[2],&chavebd[3],&chavebd[4]); 

   for (i = 0; i < 5; i++)
   {
       for (j = 0; j < 5; j++)
       {
           if (chave[i]==chavebd[j])
           {
               nrcomum++;
           }
       } 
   }
   printf("Nestava chave %d, %d, %d, %d, %d", chavebd[0], chavebd[1],chavebd[2],chavebd[3],chavebd[4]);
   printf("\nExistem %d numero comuns", nrcomum);
   nrcomum=0;


   fclose(bd);

   return 0;
}

Edited by thinkabout

Share this post


Link to post
Share on other sites
thinkabout

Como posso saber onde termina o ficheiro ? para não usar o nrchaves++;

Maneiras de fazer com o fread ?

 
while( fgets(linha, 20, bd) && nrchaves < 7)
 {
   sscanf(linha,
          "%d %d %d %d %d\n",
          &chavebd[0],
          &chavebd[1],
          &chavebd[2],
          &chavebd[3],
          &chavebd[4]);

   nrchaves++;

   for (i = 0; i < 5; i++)
   {
       for (j = 0; j < 5; j++)
       {
           if (chave[i]==chavebd[j])
           {
               nrcomum++;
           }
       } 
   }
   printf("Na chave %d, %d, %d, %d, %d", chavebd[0], chavebd[1],chavebd[2],chavebd[3],chavebd[4]);
   printf("\nExistem %d numero comuns\n", nrcomum);
   nrcomum=0;

   }
   fclose(bd);

   return 0;
}

Edited by thinkabout

Share this post


Link to post
Share on other sites
polska

A macro EOF (end-of-file) pode ser usada para ler enquanto o ficheiro não chegar ao fim da leitura.

Podes usar também a função feof.

while(fgets(linha, 20, bd) != EOF)
{
   ...
}

while(!feof(bd))
{
   fgets(linha, 20, bd)
}

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Maneiras de fazer com o fread ?

não

o fread é usado para ler um número determinado de bytes do stream. no entanto isso não acontece na tua situação porque necessitar de ler uma linha inteira de uma vez da qual não sabes o seu tamanho

----------------------

while(fgets(linha, 20, bd) != EOF)
{
   ...
}

isto está errado

http://pubs.opengroup.org/onlinepubs/009695399/functions/fgets.html

a função fgets retornar NULL quando falha, e não EOF

o código correcto seria:

while(fgets(linha, 20, bd) != NULL)
{
   ...
}

Edited by HappyHippyHippo

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

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

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