Ir ao conteúdo

Posts recomendados

Postado

O Que eu fiz de errado?
 

Spoiler


 


void verificarID(int numero, const char* filenome) // Essa é a linha 65
 {  
    verfID=false;
     s_netflix reg;
     FILE *netflix;

   if(numero>0)
   {   
    netflix=fopen(filenome,"rb");
    while(fread(&reg, sizeof(s_netflix), 1, netflix) == 1)
    if(reg.ID == numero)  
    {
    system("cls");
    verfID=true;
    printf("O ID já esta presente na lista\n");
    } 
   }
   else
   {
       system("cls");
    verfID=true;
    printf("Não pode inserir o numero 0 ou inferior\n");
   }
               


 }

 

 

image.png.9376201b009d85039bb082a32204a3c7.png

 

Linha 431: 
 

Spoiler

 


void MenuConsultar()
  {    int op;
          do
    {
    printf("----------------------Menu---------------------\n");
    printf("*        1 -> Pesquisar por ID                *\n");
    printf("*        2 -> Pesquisar por Nome_Filme        *\n");
    printf("*        3 -> Pesquisar por Genero            *\n");
    printf("*        4 -> Limpar o ecrã                   *\n");
    printf("*        7 -> Voltar                          *\n");
    printf("----------------------Menu---------------------\n");
    printf("Escolha uma das opções acima:");
    scanf("%i",&op);
    switch(op)
     {
         case 1:verificarID();break;  //Linha 431.

         case 2:system("cls");break;
             default:system("cls");
         printf("-----------------------------------------\n");
         printf("                 AVISO\n");
         printf("Opção Não encontrada, Escolha Outra\n");
         printf("-----------------------------------------\n\n");
     }    
    }while(op!=7);

 

 

Postado
20 horas atrás, Midori disse:

@caiobcc O erro é tentar usar a função sem passar os dois argumentos (numero e filenome).

 

Teria que ser algo assim,

 


case 1:verificarID(123, "teste.txt");break;

 

Hmmm, entendi mas no tipo eu não queria meter o ID e sim o usuário meter o ID, então como eu iria fazer?

Postado
23 minutos atrás, caiobcc disse:

Hmmm, entendi mas no tipo eu não queria meter o ID e sim o usuário meter o ID, então como eu iria fazer?

Use alguma função que receba o input do usuário como a scanf, p.ex

 

int n;
...
scanf("%d", &n);
...
case 1:verificarID(n, "teste.txt");break;

 

  • Obrigado 1
  • Amei 1
Postado
21 minutos atrás, Midori disse:

Use alguma função que receba o input do usuário como a scanf, p.ex

 


int n;
...
scanf("%d", &n);
...
case 1:verificarID(n, "teste.txt");break;

 

Eu tenho uma função assim:  

Spoiler

void PreencherAutomatico(const char *nome_filme)
 {
     s_netflix reg;
      netflix=fopen(nome_filme,"wb");
           
    reg.ID=1;           
     strcpy(reg.nome_filme,"Spiderman");
     strcpy(reg.duracao_filme,"2horas");
     strcpy(reg.genero,"Ação");
     strcpy(reg.avaliacao_estrela,"5 estrelas\n");
             
         fwrite(&reg,sizeof(s_netflix),1,netflix);
   
     reg.ID=2;           
     strcpy(reg.nome_filme,"Spiderman 2");
     strcpy(reg.duracao_filme,"2horas e 15min");
     strcpy(reg.genero,"Ação/Aventura");
     strcpy(reg.avaliacao_estrela,"5 estrelas\n");
     
         fwrite(&reg,sizeof(s_netflix),1,netflix);

             reg.ID=3;           
     strcpy(reg.nome_filme,"Spiderman 3");
     strcpy(reg.duracao_filme,"2horas e 36min");
     strcpy(reg.genero,"Ação/Aventura");
     strcpy(reg.avaliacao_estrela,"4,5 estrelas\n");
     
   fwrite(&reg,sizeof(s_netflix),1,netflix);
   
    fclose(netflix);
    

 

Porém como pode ver ela é automática os valores são inseridos por mim.

E tenho a função que verifica se o ID já está presente na lista

Spoiler



void verificarID(int numero, const char* filenome)
 {  
    verfID=false;
     s_netflix reg;
     FILE *netflix;

   if(numero>0)
   {   
    netflix=fopen(filenome,"rb");
    while(fread(&reg, sizeof(s_netflix), 1, netflix) == 1)
    if(reg.ID == numero)  
    {
    system("cls");
    verfID=true;
    printf("O ID já esta presente na lista\n");
    } 
   }
   else
   {
       system("cls");
    verfID=true;
    printf("Não pode inserir o numero 0 ou inferior\n");
   }
               
 }


 

 



E por fim tenho a parte da função que consulta ( e é aqui que estou com dúvidas)

na parte dos switch no case 1 creio que está com algum erro, pois quando eu aperto a opção 1, ele simplesmente mostra o Menu de novo

      void MenuConsultar()
  {    int op;
   	s_netflix reg;
 	FILE *netflix;
  		do
	{
	printf("----------------------Menu---------------------\n");
	printf("*        1 -> Pesquisar por ID                *\n");
	printf("*        2 -> Pesquisar por Nome_Filme        *\n");
	printf("*        3 -> Pesquisar por Genero            *\n");
	printf("*        4 -> Limpar o ecrã                   *\n");
	printf("*        7 -> Voltar                          *\n");
	printf("----------------------Menu---------------------\n");
	printf("Escolha uma das opções acima:");
	scanf("%i",&op);
	switch(op)
	 {
	 	case 1:verificarID(reg.ID,"s_netflix.dad");break;  //DÚVIDAS NESSA LINHA.
	 	case 2:system("cls");
	    case 3:system("cls");
	 	case 4:system("cls");
	 	case 5:system("cls");
	 	case 6:system("cls");break;
	 	case 7:system("cls");break;
	    default:system("cls");
	 	printf("-----------------------------------------\n");
	    printf("                 AVISO\n");
	 	printf("   Opção Não encontrada, Escolha Outra\n");
	 	printf("-----------------------------------------\n\n");
	 
	 }	
	 
    }while(op!=7);
} 	 

 

Postado
10 minutos atrás, caiobcc disse:

na parte dos switch no case 1 creio que está com algum erro, pois quando eu aperto a opção 1, ele simplesmente mostra o Menu de novo

Como o switch está no loop ele vai mostrar o menu enquanto o usuário não entrar com a opção 7, mas em case 1 o programa devia chamar a função verificarID antes de voltar.

 

Faça um teste com um ID existente no arquivo para ver se retorna algo,

 

case 1:verificarID(1,"s_netflix.dad");break

 

Com este ID (1) entendo que o programa tenha que retornar as informações do Spiderman que foram escritas na função PreencherAutomatico.

 

Postado

Sim retorna exatamente o que eu queria.

adicionado 0 minutos depois

Porém ainda quero que seja o que o usuário digite.

Postado

@caiobcc Coloquei a função scanf no case 1, veja se assim resolve

 

void MenuConsultar()
  {    int op;
      int n;

   	s_netflix reg;
 	FILE *netflix;
  		do
	{
	printf("----------------------Menu---------------------\n");
	printf("*        1 -> Pesquisar por ID                *\n");
	printf("*        2 -> Pesquisar por Nome_Filme        *\n");
	printf("*        3 -> Pesquisar por Genero            *\n");
	printf("*        4 -> Limpar o ecrã                   *\n");
	printf("*        7 -> Voltar                          *\n");
	printf("----------------------Menu---------------------\n");
	printf("Escolha uma das opções acima:");
	scanf("%i",&op);
	switch(op)
	 {
	 	case 1:
        printf("Digite o ID: ");
        scanf("%d", &n);
        verificarID(n,"s_netflix.dad");
        break;  //DÚVIDAS NESSA LINHA.
	 	case 2:system("cls");
	    case 3:system("cls");
	 	case 4:system("cls");
	 	case 5:system("cls");
	 	case 6:system("cls");break;
	 	case 7:system("cls");break;
	    default:system("cls");
	 	printf("-----------------------------------------\n");
	    printf("                 AVISO\n");
	 	printf("   Opção Não encontrada, Escolha Outra\n");
	 	printf("-----------------------------------------\n\n");
	 
	 }	
	 
    }while(op!=7);
} 	 

 

  • Amei 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!