Ir ao conteúdo
  • Cadastre-se

C Como comparar um numero dentro do arquivo com o do scanf?


EduardoSch

Posts recomendados

Ola, eu não sou muito bom em programação. To no inicio do curso e queria uma ajuda...

Eu to usando DEV-C++, no windows, e meu código até a parte que quero mexer é este:

void CheckIn(RegCadastro *Dados){ //Funcao para pegar os dados de novos clientes
    int I;
    FILE *Entrada;

	system("cls");
	printf("Numero do quarto desejado: ");
	scanf(" %d", &Dados[I].NumeroQuarto);
	
	fflush(stdin);
	printf("*Por questoes de controle, o codigo do quarto\nsera o numero dele multiplicado por -1.\n\n");
	Dados[I].CodigoCliente = Dados[I].NumeroQuarto * -1;
	
	printf("Insira o nome do titular: ");
	gets(Dados[I].Titular);
	fflush(stdin);
	printf("Insira o telefone do titular: ");
	scanf(" %d", &Dados[I].Telefone);
	fflush(stdin);
	printf("Numero de acompanhantes para %s: ", Dados[I].Titular);
	scanf("%d", &Dados[I].Acompanhantes);	
	fflush(stdin);
	printf("Tempo de estadia: ");
	scanf("%d", &Dados[I].TempoEstadia);
	fflush(stdin);

	printf("\n\n");
	system("cls");
	printf("Dados registrados com sucesso.");
	
	//Armazenando os dados dos vetores no arquivo
	
	Entrada = fopen("CheckIn.txt", "aw");
	fprintf(Entrada,"Codigo: %d.\n", Dados[I].CodigoCliente,"aw");
	fprintf(Entrada,"Nome do Titular: %s.\n", Dados[I].Titular,"aw");
	fprintf(Entrada,"Telefone: %d.\n", Dados[I].Telefone,"aw");
	fprintf(Entrada,"Quarto: %d.\n", Dados[I].NumeroQuarto, "aw");
	fprintf(Entrada,"Numero de acompanhantes: %d.\n", Dados[I].Acompanhantes,"aw");
	fprintf(Entrada,"%d dia(s).\n\n", Dados[I].TempoEstadia,"aw");
	fprintf(Entrada,"            **              \n\n", "aw");
	fclose(Entrada);
	getche();
	
}

 

Minha dificuldade é a seguinte: sempre que eu entrar nessa função CheckIn, serão cadastrados novos hospedes e serao gravados todos os dados inseridos no bloco txt.

Obs.: Esses dois asteriscos é apenas para separar cada cliente.

 

Enfim, o que eu quero fazer é um if em baixo da linha: scanf(" %d", &Dados.NumeroQuarto);

Essa condição faz o seguinte: ela precisa entrar no arquivo em modo leitura. O valor inserido para Dados.NumeroQuarto vai ser multiplicado por -1 para converter o numero do quarto para um código.... Ao inserir o numero 3 por exemplo, será verificado no arquivo CheckIn o numero -3. E  se encontrar, eu gostaria que aparecesse como printf: Este quarto já está ocupado, por favor, escolha outro. Ai ele volta a perguntar o numero do quarto desejado, até que o numero inserido não exista no arquivo CheckIn.txt

 

Os quartos vão de 1 ate 55.

 

Eu tentei pesquisar e mudar varias coisas, mas não consigo fazer. 

Obrigado!

 

Link para o comentário
Compartilhar em outros sites

@EduardoSch Veja, você tem que ler o arquivo da mesma forma que foi salva, assim é possível usar o fscanf e verificar rapidamente se o quarto já está ocupado, de uma lida sobre fscanf. Uma dica, já que você salva o checkin assim no arquivo:

//Salvamento - tente não usar pontos
fprintf(Entrada,"Codigo: %d.\n", Dados[I].CodigoCliente,"aw");
fprintf(Entrada,"Nome do Titular: %s.\n", Dados[I].Titular,"aw");
fprintf(Entrada,"Telefone: %d.\n", Dados[I].Telefone,"aw");
fprintf(Entrada,"Quarto: %d.\n", Dados[I].NumeroQuarto, "aw");
fprintf(Entrada,"Numero de acompanhantes: %d.\n", Dados[I].Acompanhantes,"aw");
fprintf(Entrada,"%d dia(s).\n\n", Dados[I].TempoEstadia,"aw");
fprintf(Entrada,"            **              \n\n", "aw");

//Output's
1- Codigo: X
2- Nome do Titular: XXXX
3- Telefone: XXXX-XXXX
4- Quarto: XXX
5- Numero de acompanhantes: X
6- X dia(s).
7-            **              
8-
9- Codigo: X

 

 

Observe acima, depois da linha 2, apenas a linha 9 terá outro código, então você pode usar um contador mais o while, até encontrar o próximo código, exemplo:

#define separador 7 //contagem de linhas que separa os codigos


bool bsCodigo(int codigo, const char *nomeArquivo){
    //;; var temporarias
    char buffer[500];
    int cdgtmp = 0;
    int linhaAtual = 1;	
    int proxLinha = 1;
    FILE *arquivo = fopen(nomeArquivo, "r");
    
  	if(arquivo != NULL){
    	//;; achar código no arquivo até EOF
        while(!feof(arquivo)){
            //;; Se linhaAtual for a linha  prevista, Código:
         	if(linhaAtual == proxLinha){
            	fscanf(arquivo,"%s %d", buffer, &cdgtmp);
                if(codigo == cdgtmp){
                  	//;; código encontrado
                	fclose(arquivo);
                    return true;
                }
            	proxLinha += separador;
            }
        	linhaAtual++;
        }
    	fclose(arquivo);
    }
  
//;; código não encontrado
return false;
}

 

Link para o comentário
Compartilhar em outros sites

Ola, @TYSQUARE89, eu entendi um pouco sobre o que escreveu ali. Eu tive duvidas de onde inserir esta parte. Eu pensei em um arquivo header e incluir como #include dentro do arquivo header desta função ali em cima, que é void CheckIn(). Eu to errado?

 

Se sim, onde devo implementar esta verificação? Fique um pouco perdido.

Obrigado

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

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!