Ir ao conteúdo
  • Cadastre-se

Programa em c


brunopandradef

Posts recomendados

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;
}
 

Link para o comentário
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).

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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