Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
brunopandradef

Programa em c

Recommended Posts

Preciso saber por que quando eu chamo a funçao "funbusca" ela fica repetindo varias vezes o que ta escrito no cadastro.txt ..???.>>>

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
char url[]="cadastro.txt";
struct registro
{
      char nome[25];
      char bairro[20];
      char uf[2];
      char rua[25];
      char cidade[20];
      char telefone[20];
      int cpf, num;
      char cod[20];
};
void gotoxy(int x, int y){
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x-1,y-1});
}
void funcadastro()
{
    struct registro cadastro;
    int resp;
    FILE *arq;

    arq = fopen(url, "a+");
    if(arq == NULL)
            printf("Erro, nao foi possivel abrir o arquivo\n");
    else {
    gotoxy(15,2);
    printf("Informe seu codigo: ");
    scanf("%d",&cadastro.cod);
    fprintf(arq, "Codigo: %d\n", cadastro.cod);
    gotoxy(15,4);
    printf("Informe seu nome: ");
    fflush(stdin);
    gets(cadastro.nome);
    fprintf(arq, "Nome: %s\n", cadastro.nome);
    gotoxy(15,6);
    printf("Informe seu UF: ");
    fflush(stdin);
    gets(cadastro.uf);
    fprintf(arq, "UF: %s\n", cadastro.uf);
    gotoxy(15,8);
    printf("Informe sua cidade: ");
    fflush(stdin);
    gets(cadastro.cidade);
    fprintf(arq, "Cidade: %s\n", cadastro.cidade);
    gotoxy(15,10);
    printf("Informe seu bairro: ");
    fflush(stdin);
    gets(cadastro.bairro);
    fprintf(arq, "Bairro: %s\n", cadastro.bairro);
    gotoxy(15,12);
    printf("Informe sua rua: ");
    fflush(stdin);
    gets(cadastro.rua);
    fprintf(arq, "Rua: %s\n", cadastro.rua);
    gotoxy(15,14);
    printf("Informe seu CPF: ");
    scanf ("%d",&cadastro.cpf);
    fprintf(arq, "CPF: %d\n", cadastro.cpf);
    gotoxy(15,16);
    printf("Informe seu numero: ");
    scanf("%d",&cadastro.num);
    fprintf(arq, "Numero: %d\n", cadastro.num);
    gotoxy(15,18);
    printf("Informe seu telefone: ");
    fflush(stdin);
    gets(cadastro.telefone);
    fprintf(arq, "Telefone: %s\n", cadastro.telefone);
    }
    fclose(arq);
    gotoxy(15,20);
    system("cls");
    printf("\t\tDeseja continuar? 1-SIM / 0-NAO: ");
    scanf("%d", &resp);
    while(resp < 0 || resp > 1)
    {
        printf("Valor incorreto tente novamente, 1-SIM / 2-NAO: ");
        scanf("%d",&resp);
    }
    if(resp != 0)
        return main();
}
void funbusca ()
{
 FILE *arq;
 char linha[100];
 char *result;
 int i;
 // Abre um arquivo TEXTO para LEITURA
 arq = fopen("cadastro.txt", "rt");
 if (arq == NULL) // Se houve erro na abertura
 {
 printf("Problemas na abertura do arquivo\n");
 return;
 }
 i = 1;
 while (!feof(arq))
 {
 result = fgets(linha, 100, arq);
 if (result)
 printf(linha);


 }
 fclose(arq);
}

int main()
{
    int resp;
    gotoxy(15,2);
    printf("1 - CADASTRO\n");
    gotoxy(15,4);
    printf("2 - ALTERACAO\n");
    gotoxy(15,6);
    printf("3 - BUSCA\n");
    gotoxy(15,8);
    printf("4 - EXCLUSAO\n");
    gotoxy(15,10);
    printf("0 - SAIR\n");
    gotoxy(15,12);
    printf("Escolha a opcao desejada: ");
    scanf("%d", &resp);
    while(resp < 0 || resp > 4)
    {
        printf("Valor incorreto, Tente novamente: ");
        scanf("%d", &resp);
    }
    system("cls");
    while(resp!=0)
    {
    switch(resp)
    {
    case 1:
        funcadastro();
        break;
    case 2:
        //funalteracao();
        break;
    case 3:
        funbusca();
        break;
    case 0:
        printf("\nSAINDOO\n");
        break;
    }
    }
    return 0;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Corrigindo:


void funbusca ()
{
	FILE *arq = NULL;
	char linha[100];
	int i = 0;
 
	// Abre um arquivo TEXTO para LEITURA
	arq = fopen("cadastro.txt", "rt");
	if (!arq)
	{
 		printf("Problemas na abertura do arquivo\n");
 		return;
 	}
 	while (fgets(linha, 100, arq))
 	{	
		printf("%d: %s",i++,linha);
	}
 	fclose(arq);
}

Muitas coisas que eu mudei, foi apenas para tornar o código mais limpo, o que percebi foi o uso do result, e algumas desnecessidades, como eu não havia testado antes não sei se corrigiu seu problema, mas sei que esta lendo certo, antes perceba que o limite para cada linha é de 100 CARACTERES (Letras, espaços inclusos), então se uma linha tiver mais de 100, ele não ira mostrar a partir de 100(no caso de 0...99).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×