Ir ao conteúdo
  • Cadastre-se

C Programa com arquivos gravar e ler.


Posts recomendados

Gente eu estou fazendo um programa em linguagem c de cadastramento  de membros, lideres e ofertas ( programa simples) . Alguém poderia me ajudar  ? não sei o que estou errando. Eu estou com dificuldade de gravar e ler arquivos.

 

 

 

#include <stdio.h>

int ofertas[100], lideres[100], membros[100];
FILE *arquivo;

//STRUCT
struct  membros {

    char nome [100];
    char endereco [100];
    int aniversario [100];
    char rg [100];

};

//VARIAVEIS GLOBAIS
struct membros m ;


//STRUCT
struct lideres {

    char nome [20];
    char registro [30];
    char idade [30];
    char cargo [30];

};

//VARIAVEIS GLOBAIS
struct lideres l ;

//STRUCT
struct ofertas
{
    char dia [20];
    float valor [30];

};

//VARIAVEIS GLOBAIS
struct ofertas f ;


void cadastro_lideres(void);
void relatorio_lideres(void);
void cadastro_membros(void);
void relatorio_membros(void);
void cadastro_ofertas(void);
void relatorio_ofertas(void);


int main()
{
	int op;
	do
	{
		printf("\n1 - Cadastro membro");
		printf("\n2 - Cadastro oferta");
		printf("\n3 - Cadastro lider");
		printf("\n4 - Relatorio membro");
		printf("\n5 - Relatorio oferta ");
		printf("\n6 - Relatorio lider");
		printf("\n0 - Sair");
		printf("\nEscolha a opcao..:");
		scanf("%i",&op);
		switch(op)
		{
			case 1:
			   cadastro_membros();
			   break;
			case 2:
			   cadastro_ofertas();
			   break;
			case 3:
			   cadastro_lideres();
			   break;
			case 4:
			   relatorio_membros();
			   break;
			case 5:
			   relatorio_ofertas();
			   break;
			case 6:
			   relatorio_lideres();
			   break;
		}
	}while(op > 0 && op <=6);
	return(0);
}



void cadastro_lideres(void)
{
	int i;
	FILE*arquivo;
    arquivo = fopen("arquivo.txt","a");
	if(arquivo == NULL)
	{
		printf("\nErro na abertura do arquivo!!!!");
	}
	else
	{
	for(i=0;i<10;i++)
        {
		printf("Informe o nome do lider...:");
		scanf("%s",&lideres[i],l.nome);
		fprintf(arquivo,"\nNome do lider.....:%s",lideres[i],l.nome);
		printf("Informe o cargo do lider...:");
		scanf("%i",&lideres[i],l.cargo);
		fprintf(arquivo,"\nCargo do lider ...:%s",lideres[i],l.cargo);
		printf("Informe o registro do lider...:");
		scanf("%s",&lideres[i],l.registro);
		fprintf("Informe o registro do lider...:%s",lideres[i],l.registro);
		printf("Informe a idade do lider...:");
		scanf("%i",&lideres[i],l.idade);
		printf("Informe a idade do lider...:%i",lideres[i],l.idade);

        }
	}
    fclose(arquivo);

}

void relatorio_lideres(void)
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("\nNome do lider..........:%s",lideres[i],l.nome);
		printf("\nCargo do lider......:%s",lideres[i],l.cargo);
		printf("\nRegistro do lider......:%s",lideres[i],l.registro);
		printf("\nIdade do lider.........:%i",lideres[i],l.idade);

	}

}



void cadastro_membros(void)
{
    FILE *arquivo;
	int i;
	arquivo = fopen("arquivo.txt","a");
	if(arquivo == NULL)
	{
		printf("\nErro na abertura do arquivo!!!!");
	}
	else
	{

		for(i=0;i<10;i++)
		{
			printf("Informe o nome do membro...:");
			scanf("%s",&membros[i],m.nome);
			fprintf(arquivo,"\nNome do membro.....:%s",membros[i],m.nome);
			printf("Informe o RG do membro...:");
			scanf("%s",&membros[i],m.rg);
			fprintf(arquivo,"\nRG do membro.....:%s",membros[i],m.rg);
			printf("Informe a data de aniversario do membro...:");
			scanf("%i",&membros[i],m.aniversario);
			fprintf(arquivo,"\nData de aniversario.....:%i",membros[i],m.aniversario);
			printf("Informe a endereço do membro...:");
			scanf("%i",&membros[i],m.endereco);
			fprintf(arquivo,"\nEndereco do membro.....:%i",membros[i],m.endereco);

		}
	}
	fclose(arquivo);
}

void relatorio_membros(void)
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("\nNome do membro...:%s",membros[i],m.nome);
		printf("\nRG do membro.....:%s",membros[i],m.rg);
		printf("\n Aniversario do membro..:%i",membros[i],m.aniversario);
		printf("\nEndereco do membro ..:%i",membros[i],m.endereco);
	}

}


void cadastro_ofertas(void)
{   int i;
    FILE*arquivo;
    arquivo = fopen("arquivo.txt","a");
	if(arquivo == NULL)
	{
		printf("\nErro na abertura do arquivo!!!!");
	}
	else
	{
	for(i=0;i<5;i++)
        {
		printf("Informe o dia da oferta...:");
		scanf("%s",&ofertas[i],f.dia);
		fprintf("Informe o dia da oferta...:%s",ofertas[i],f.dia);
		printf("Informe o valor da oferta...:");
		scanf("%s",&ofertas[i],f.valor);
		fprintf("Informe o valor da oferta...:%s",ofertas[i],f.valor);

        }
    }
    fclose(arquivo);
}

void relatorio_ofertas(void)
{
	int i;
	for(i=0;i<10;i++)
	{
		printf("\nDia oferta ..........:%s",ofertas[i],f.dia);
		printf("\nValor da oferta .....:%s",ofertas[i],f.valor);

	}

}

 

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

@Jemima Fonseca Passos    no cadastro de lideres você colocou assim :

 

for(i=0;i<10;i++)
        {
		printf("Informe o nome do lider...:");
		scanf("%s",&lideres[i],l.nome);
		fprintf(arquivo,"\nNome do lider.....:%s",lideres[i],l.nome);
		printf("Informe o cargo do lider...:");
		scanf("%i",&lideres[i],l.cargo);
		fprintf(arquivo,"\nCargo do lider ...:%s",lideres[i],l.cargo);
		printf("Informe o registro do lider...:");
		scanf("%s",&lideres[i],l.registro);
		fprintf("Informe o registro do lider...:%s",lideres[i],l.registro);
		printf("Informe a idade do lider...:");
		scanf("%i",&lideres[i],l.idade);
		printf("Informe a idade do lider...:%i",lideres[i],l.idade);

        }

mas o certo seria assim :

for(i=0;i<10;i++)
{
    printf("Informe o nome do lider...:");
    scanf("%s",&l[i].nome);
    fprintf(arquivo,"\nNome do lider.....:%s",l[i].nome);
    printf("Informe o cargo do lider...:");
    scanf("%i",&l[i].cargo);
    fprintf(arquivo,"\nCargo do lider ...:%s",l[i].cargo);
    printf("Informe o registro do lider...:");
    scanf("%s",&l[i].registro);
    fprintf("Informe o registro do lider...:%s",l[i].registro);
    printf("Informe a idade do lider...:");
    scanf("%i",&l[i].idade);
    printf("Informe a idade do lider...:%i",l[i].idade);

}

nos outros cadastro também .

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

@Jemima Fonseca Passos   para fazer a leitura de um arquivo  você pode usar o comando fscanf assim :

while(fscanf(arquivo,"%s",palavra) != EOF )
    printf("%s ",palavra);

cada fscanf vai ler uma palavra se entre aspas tiver um %s ou um caractere se tive ou um inteiro se tiver ou um float se tiver f , onde arquivo é a variável do tipo FILE e palavra é uma variável do tipo char com varias posições, umas vinte está bom,  e o certo seria você fazer a leitura do arquivo do mesmo jeito que você gravou, no mesmo formato,  no inicio do programa e colocar os dados no struct  com isso você tem tudo que foi gravado antes e continua de onde parou , e ir imprimindo e gravando não é bom ,  melhor ir guardando os dados no struct e depois que fizer todos os cadastros vai em uma função  que faz a gravação no arquivo, ou na saída do programa  .   então um trecho do  seu código que faz a leitura seria assim :

void relatorio_ofertas()
{
        FILE*arquivo;
        arquivo = fopen("arquivo.txt","r");
        int i;
        char op[20],op2[20];
        if(arquivo==NULL)printf("Erro No Arquivo...");
        else{
            for(i=0;i<10;i++)
            {
                while(fscanf(arquivo,"%s",&op != EOF && fscanf(arquivo,"%s",&op2 != EOF)){
                    printf("\nDia oferta ..........:%s",op);
                    printf("\nValor da oferta .....:%s\n",op2);
                }
            }
        }
        fclose(arquivo);
}

 

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

.

#include <stdio.h>


//STRUCT
struct  membros {

    char nome [100];
    char endereco [100];
    char aniversario[100] ;
    char rg [100];

};

//VARIAVEIS GLOBAIS
struct membros m ;


//STRUCT
struct lideres {

    char nome [20];
    char registro [30];
    char idade [30];
    char cargo [30];

};

//VARIAVEIS GLOBAIS
struct lideres l ;

//STRUCT
struct ofertas
{
    char dia [20];
    char valor [100] ;

};

//VARIAVEIS GLOBAIS
struct ofertas f ;


void cadastro_lideres(void);
void relatorio_lideres(void);
void cadastro_membros(void);
void relatorio_membros(void);
void cadastro_ofertas(void);
void relatorio_ofertas(void);


int main()
{
	int op;
	do
	{
		printf("\n1 - Cadastro membro");
		printf("\n2 - Cadastro oferta");
		printf("\n3 - Cadastro lider");
		printf("\n4 - Relatorio membro");
		printf("\n5 - Relatorio oferta ");
		printf("\n6 - Relatorio lider");
		printf("\n0 - Sair");
		printf("\nEscolha a opcao..:");
		scanf("%i",&op);
		switch(op)
		{
			case 1:
			   cadastro_membros();
			   break;
			case 2:
			   cadastro_ofertas();
			   break;
			case 3:
			   cadastro_lideres();
			   break;
			case 4:
			   relatorio_membros();
			   break;
			case 5:
			   relatorio_ofertas();
			   break;
			case 6:
			   relatorio_lideres();
			   break;
		}
	}while(op > 0 && op <=6);
	return(0);
}



void cadastro_lideres(void)
{
	int i;
	FILE*arquivo;
    arquivo = fopen("arquivo.txt","a");
	if(arquivo == NULL)
	{
		printf("\nErro na abertura do arquivo!!!!");
	}
	else
	{

		printf("Informe o nome do lider...:");
		scanf("%s",&l.nome);
		fprintf(arquivo,"\nNome do lider.....:%s",l.nome);
		printf("Informe o cargo do lider...:");
		scanf("%i",&l.cargo);
		fprintf(arquivo,"\nCargo do lider ...:%s",l.cargo);
		printf("Informe o registro do lider...:");
		scanf("%s",&l.registro);
		fprintf(arquivo,"Informe o registro do lider...:%s",l.registro);
		printf("Informe a idade do lider...:");
		scanf("%s",&l.idade);
		printf("Informe a idade do lider...:%s",l.idade);


	}
    fclose(arquivo);
    system("cls");
    main();
}

void relatorio_lideres(void)
{

		FILE*arquivo;
        arquivo = fopen("arquivo.txt","r");
        char op[20],op2[20],op3[20],op4[20];
        if(arquivo==NULL)printf("Erro No Arquivo...");
        else{

                while(fscanf(arquivo,"%s",&op) != EOF && fscanf(arquivo,"%s",&op2 )!= EOF && fscanf(arquivo,"%s",&op3 )!= EOF && fscanf(arquivo,"%s",&op2)!= EOF){
                    printf("\nDia oferta ..........:%s",op);
                    printf("\nValor da oferta .....:%s\n",op2);
                    printf("\nNome do lider..........:%s",op);
                    printf("\nCargo do lider......:%s",op2);
                    printf("\nRegistro do lider......:%s",op3);
                    printf("\nIdade do lider.........:%i",op4);
                }

        }
}



void cadastro_membros(void)
{
    FILE *arquivo;
	int i;
	arquivo = fopen("arquivo.txt","a");
	if(arquivo == NULL)
	{
		printf("\nErro na abertura do arquivo!!!!");
	}
	else
	{


			printf("Informe o nome do membro...:");
			scanf("%s",&m.nome);
			fprintf(arquivo,"\nNome do membro.....:%s",m.nome);
			printf("Informe o RG do membro...:");
			scanf("%s",&m.rg);
			fprintf(arquivo,"\nRG do membro.....:%s",m.rg);
			printf("Informe a data de aniversario do membro...:");
			scanf("%i",&m.aniversario);
			fprintf(arquivo,"\nData de aniversario.....:%i",m.aniversario);
			printf("Informe a endereço do membro...:");
			scanf("%i",&m.endereco);
			fprintf(arquivo,"\nEndereco do membro.....:%i",m.endereco);


	}
    fclose(arquivo);
    system("cls");
    main();
}

void relatorio_membros(void)
{

    FILE*arquivo;
        arquivo = fopen("arquivo.txt","r");
        char op[20],op2[20], op3[20],op4[20];
        if(arquivo==NULL)printf("Erro No Arquivo...");
        else{

                while(fscanf(arquivo,"%s",&op) != EOF && fscanf(arquivo,"%s",&op2 ) != EOF && fscanf(arquivo,"%s",&op3)!= EOF && fscanf(arquivo,"%s",&op4)!= EOF){

                    printf("\nNome do membro...:%s\n",op);
                    printf("\nRG do membro.....:%s\n",op2);
                    printf("\n Aniversario do membro..:%s\n",op3);
                    printf("\nEndereco do membro ..:%s\n",op4);
                }

        }
    system("cls");
    main();



}


void cadastro_ofertas(void)
{
    FILE*arquivo;
    arquivo = fopen("arquivo.txt","a");
	if(arquivo == NULL)
	{
		printf("\nErro na abertura do arquivo!!!!");
	}
	else
	{

		printf("Informe o dia da oferta...:");
		scanf("%s",&f.dia);
		fprintf(arquivo,"Informe o dia da oferta...:%s",f.dia);
		printf("Informe o valor da oferta...:");
		scanf("%s",&f.valor);
		fprintf(arquivo,"Informe o valor da oferta...:%s",f.valor);


    }
    fclose(arquivo);
    system("cls");
    main();
}

void relatorio_ofertas(void)
{
        FILE*arquivo;
        arquivo = fopen("arquivo.txt","r");
        char op[20],op2[20];
        if(arquivo==NULL)printf("Erro No Arquivo...");
        else{

                while(fscanf(arquivo,"%s",&op) != EOF && fscanf(arquivo,"%s",&op2)!= EOF){
                    printf("\nDia oferta ..........:%s",op);
                    printf("\nValor da oferta .....:%s\n",op2);
                }

        }
    system("cls");
    main();
}

.

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

@Jemima Fonseca Passos    seu código está bom,  apenas alguns erros como disse o @TYSQUARE89 ,   e você precisa colocar em qual posição do vetor struct você está se referindo, pois do jeito que está ele só vai cadastrar um,  e creio que seria melhor pegar os dados do arquivo e colocar no struct para fazer mais cadastros ou as modificações que você queira, então seu código com algumas modificações ficaria assim :

#include <stdio.h>
#include <conio.h>
#include <string.h>

void cadastro_membros (void);
void cadastro_ofertas (void);
void cadastro_lideres (void);
void relatorio_membros(void);
void relatorio_ofertas(void);
void relatorio_lideres(void);

struct  membros {

    char nome       [40];
    char endereco   [30];
    char aniversario[30] ;
    char rg         [30];

};

/*//VARIAVEIS GLOBAIS*/
struct membros m[100] ;
struct lideres {

    char nome     [40];
    char registro [20];
    char idade    [30];
    char cargo    [30];

};

/*//VARIAVEIS GLOBAIS*/
struct lideres l[100] ;/*pode cadastrar ate 100 lider*/
struct ofertas
{
    char  dia   [40];
    float valor     ;

};

/*//VARIAVEIS GLOBAIS*/
struct ofertas f[100] ;
FILE *arquivo;
int cont_m,cont_l,cont_f,i;
int op,u,t,st;
char us[40],opc;

int main(){
    /*tem que gravar struct membros e colocar : depois struct lideres : depois struct ofertas : */
    arquivo = fopen("arquivoS.txt","r");
    if(arquivo==NULL)printf("O Arquivo Ainda Nao Existe, Sera Criado No Final");
    else{
            /*esse struct e de membros*/
        while( 1 ){
            fgets(m[cont_m].nome,40,arquivo);      /*pega os quarenta primeiros caracters mais newline */
            if(m[cont_m].nome[0]=='\n')fgets(m[cont_m].nome,40,arquivo);/*se for newline pega novamente*/
            m[cont_m].nome[strlen(m[cont_m].nome)-1]=' ';                 /*reseta o newline da string */
            if(strcmp(m[cont_m].nome,"----- Cadastro De Membros ----- ")==0)fgets(m[cont_m].nome,40,arquivo);
            if(m[cont_m].nome[0]==':')break;                    /*se for dois pontos, fim desse struct */
            fgets(m[cont_m].rg,30,arquivo);          /*pega os trinta primeiros caracters mais newline */
            fgets(m[cont_m].aniversario,30,arquivo); /*pega os trinta primeiros caracters mais newline */
            fgets(m[cont_m].endereco,30,arquivo);    /*pega os trinta primeiros caracters mais newline */
            m[cont_m].nome[strlen(m[cont_m].nome)-1]=' ';                 /*reseta o newline da string */
            m[cont_m].rg[strlen(m[cont_m].rg)-1]=' ';                     /*reseta o newline da string */
            m[cont_m].aniversario[strlen(m[cont_m].aniversario)-1]=' ';   /*reseta o newline da string */
            m[cont_m].endereco[strlen(m[cont_m].endereco)-1]=' ';         /*reseta o newline da string */
            cont_m++;
        }
        while( 1 ){/*esse struct eh de lideres */
            fgets(l[cont_l].nome,40,arquivo);      /*pega os quarenta primeiros caracters mais newline */
            if(l[cont_l].nome[0]=='\n')fgets(l[cont_l].nome,40,arquivo);/*se for newline pega novamente*/
            l[cont_l].nome[strlen(l[cont_l].nome)-1]=' ';                 /*reseta o newline da string */
            if(strcmp(l[cont_l].nome,"----- Cadastro De Lideres ----- ")==0)fgets(l[cont_l].nome,40,arquivo);
            if(l[cont_l].nome[0]==':')break;                    /*se for dois pontos, fim desse struct */
            fgets(l[cont_l].registro,30,arquivo);    /*pega os trinta primeiros caracters mais newline */
            fgets(l[cont_l].idade,30,arquivo);       /*pega os trinta primeiros caracters mais newline */
            fgets(l[cont_l].cargo,30,arquivo);       /*pega os trinta primeiros caracters mais newline */
            l[cont_l].nome[strlen(l[cont_l].nome)-1]=' ';                 /*reseta o newline da string */
            l[cont_l].registro[strlen(l[cont_l].registro)-1]=' ';         /*reseta o newline da string */
            l[cont_l].idade[strlen(l[cont_l].idade)-1]=' ';               /*reseta o newline da string */
            l[cont_l].cargo[strlen(l[cont_l].cargo)-1]=' ';               /*reseta o newline da string */
            cont_l++;
        }
        while( 1 ){/*esse struct eh de ofertas */
            fgets(f[cont_f].dia,40,arquivo);       /*pega os quarenta primeiros caracters mais newline */
            if(f[cont_f].dia[0]=='\n')fgets(f[cont_f].dia,40,arquivo);  /*se for newline pega novamente*/
            f[cont_f].dia[strlen(f[cont_f].dia)-1]=' ';                   /*reseta o newline da string */
            if(strcmp(f[cont_f].dia,"----- Cadastro De Ofertas ----- ")==0)fgets(f[cont_f].dia,40,arquivo);
            if(f[cont_f].dia[0]==':')break;                     /*se for dois pontos, fim desse struct */
            fscanf(arquivo,"%f",&f[cont_f].valor);          /*pega só uma palavra ou numero do arquivo */
            fgets(us,40,arquivo);                        /*para ler o restante da linha, senão dá erro */
            f[cont_f].dia[strlen(f[cont_f].dia)-1]=' ';                   /*reseta o newline da string */
            cont_f++;
        }
    }
    fclose(arquivo);

    do
	{
	    system("cls");
		printf("\n1 - Cadastro membro"  );
		printf("\n2 - Cadastro oferta"  );
		printf("\n3 - Cadastro lider"   );
		printf("\n4 - Relatorio membro" );
		printf("\n5 - Relatorio oferta ");
		printf("\n6 - Relatorio lider"  );
		printf("\n0 - Sair");
		printf("\nEscolha a opcao..:   ");
		scanf("%i",&op);
		switch(op)
		{
			case 1:
			   cadastro_membros();
			   break;
			case 2:
			    cadastro_ofertas();
			   break;
			case 3:
			    cadastro_lideres();
			   break;
			case 4:
			    relatorio_membros();
			   break;
			case 5:
			    relatorio_ofertas();
			   break;
			case 6:
			    relatorio_lideres();
			   break;
		}
	}while(op !=0);
	/* os dados serao gravados aqui na saida do programa */
	remove("arquivoS.txt");
	arquivo=fopen("arquivoS.txt","a");         /* abre o arquivo para ler e gravar */
	if(arquivo==NULL){
        arquivo=fopen("arquivoS.txt","w");            /*cria o arquivo para gravar */
	}
	fprintf(arquivo,"%s","----- Cadastro De Membros -----\n");/*escreve o cabeçalho*/
    for(i=0;i<cont_m;i++){   /* grava os membros */
        fprintf(arquivo,"%s\n",m[i].nome        );
        fprintf(arquivo,"%s\n",m[i].rg          );
        fprintf(arquivo,"%s\n",m[i].aniversario );
        fprintf(arquivo,"%s\n",m[i].endereco    );
        if(i!=cont_m-1)fprintf(arquivo,"%s","\n"); /*para pular uma linha no texto*/
    }
    fprintf(arquivo,"%s\n",":");                /* : é o fim desses dados no texto */
    fprintf(arquivo,"%s","----- Cadastro De Lideres -----\n");/*escreve o cabeçalho*/
    for(i=0;i<cont_l;i++){   /* grava os lideres */
        fprintf(arquivo,"%s\n",l[i].nome        );
        fprintf(arquivo,"%s\n",l[i].registro    );
        fprintf(arquivo,"%s\n",l[i].idade       );
        fprintf(arquivo,"%s\n",l[i].cargo       );
        if(i!=cont_l-1)fprintf(arquivo,"%s","\n");  /*para pular uma linha no texto*/
    }
    fprintf(arquivo,"%s\n",":");                /* : é o fim desses dados no texto */
    fprintf(arquivo,"%s","----- Cadastro De Ofertas -----\n");/*escreve o cabeçalho*/
    for(i=0;i<cont_f;i++){    /* grava as ofertas */
        fprintf(arquivo,"%s\n",f[i].dia         );
        fprintf(arquivo,"%.2f\n",f[i].valor     );
        if(i!=cont_f-1)fprintf(arquivo,"%s","\n");  /*para pular uma linha no texto*/
    }
    fprintf(arquivo,"%s\n",":");                /* : é o fim desses dados no texto */
    fclose(arquivo);
    return 0;
}
void cadastro_membros(void){
    do{
        opc='n';
        printf("Informe o nome do membro...:");
        fflush(stdin);
        gets(m[cont_m].nome);
        printf("Informe o RG do membro...:");
        fflush(stdin);
        scanf("%s",&m[cont_m].rg);
        printf("Informe a data de aniversario do membro...:");
        fflush(stdin);
        gets(m[cont_m].aniversario);
        printf("Informe a endereco do membro...:");
        fflush(stdin);
        gets(m[cont_m].endereco);
        cont_m++;
        printf("Quer Fazer Outro Cadastro S/N ");
        fflush(stdin);
        scanf("%c",&opc);
    }while(opc =='s');
}
void cadastro_ofertas(void){
    do{
        opc='n';
        printf("Informe O Dia Da Oferta...:");
        fflush(stdin);
        gets(f[cont_f].dia);
        printf("Informe O Valor Da Oferta...:");
        fflush(stdin);
        scanf("%f",&f[cont_f].valor);
        cont_f++;
        printf("Quer Fazer Outro Cadastro S/N ");
        fflush(stdin);
        scanf("%c",&opc);
    }while(opc =='s');
}
void cadastro_lideres(void){
    do{
        opc='n';
        printf("Informe O Nome Do Lider...:");
        fflush(stdin);
        gets(l[cont_l].nome);
        printf("Informe O Cargo Do Lider...:");
        fflush(stdin);
        scanf("%s",&l[cont_l].cargo);
        printf("Informe O Registro Do Lider...:");
        fflush(stdin);
        gets(l[cont_l].registro);
        printf("Informe A Idade Do Lider...:");
        fflush(stdin);
        gets(l[cont_l].idade);
        cont_l++;
        printf("Quer Fazer Outro Cadastro S/N ");
        fflush(stdin);
        scanf("%c",&opc);
    }while(opc =='s');
}
void relatorio_ofertas(){
    printf("Relatorio De Ofertas\n");
    for(i=0;i<cont_f;i++){
        printf("aqui o dia ------------> %s\n",f[i].dia);
        printf("aqui o valor ----------> %.2f\n",f[i].valor);
        printf("    Tecle\n");
        getch();
    }
}
void relatorio_membros(){
    printf("Relatorio De Membros\n");
    for(i=0;i<cont_m;i++){
        printf("aqui o nome --------> %s\n",m[i].nome);
        printf("aqui o rg ----------> %s\n",m[i].rg);
        printf("aqui o aniversario -> %s\n",m[i].aniversario);
        printf("aqui o endereco ----> %s\n",m[i].endereco);
        printf("    Tecle\n");
        getch();
    }
}
void relatorio_lideres(){
    printf("Relatorio De Lideres\n");
    for(i=0;i<cont_l;i++){
        printf("aqui o Nome --------> %s\n",l[i].nome);
        printf("aqui o Reggistro ---> %s\n",l[i].registro);
        printf("aqui o Idade -------> %s\n",l[i].idade);
        printf("aqui o Cargo -------> %s\n",l[i].cargo);
        printf("    Tecle\n");
        getch();
    }
}

não usei o fscanf pois ele pega apenas uma palavra, então se o nome da pessoa tiver dois ou tres nomes ele pega apenas o primeiro e o próximo fscanf pega a outra palavra, e em muitos casos não é isso que queremos, escolhi o fgets,pois o comando fgets pega a linha toda , dependendo do tamanho especificado na variável ou até encontrar um newline "\n" e pega até o newline,  então será necessário resetar esse caractere newline pois senão na hora de imprimir o gravar no arquivo haverá erro pois pulará uma linha , então precisa encontrar esse caractere na sting e colocar um caractere no lugar dele pode ser um caracter espaço '  ' assim a string estará normal, e para encontrar esse newline ,que estará na última posição da string, usamos a função strlen que vai retornar o tamanho da string então em strlen-1 estará o newline pois as posições começam de zero e é aí no strlen-1 que colocamos o outro caractere espaço  '  ' assim :

string[strlen(string)-1] =' ';

 

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

void consultar()
{
    FILE*arquivo;
    char nome;

     char pesq[80];
     printf("Digite o nome que deseja consultar. ");
     gets(pesq);
     fflush(stdin);

        arquivo=fopen("membro.txt","r");
        if(strcmp(nome,pesq)==0)
        {
           printf("Dados encontrados.\n");
           printf("Nome: %s",nome);

           system("pause");
           exit(0);
        }

     printf("Nome nao encontrado.\n");
     system("pause");
     exit(0);
}

Eu quero consultar por nome os membros , o que esta errado ??

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

@Jemima Fonseca Passos    nesse seu código você esqueceu de pegar a palavra no arquivo antes de comparar com  a variável pesq,  e faltou colocar a quantidade de caracteres da string em nome , pois se não colocar essa quantidade de caracteres, na hora de ler dá erro, o retante está certo .  então seu código ficaria assim :

#include <stdio.h>
#include <string.h>
void consultar();
int main(){
    consultar();
    return 0;
}
void consultar()
{
    FILE *arquivo;
    char nome[30];/* precisa colocar a quantidade de caracteres */

     char pesq[80];
     printf("Digite o nome que deseja consultar. ");
     gets(pesq);
     fflush(stdin);

    arquivo=fopen("membro.txt","r");
    while(fscanf(arquivo,"%s",&nome)!=EOF){/* precisa pegar o nome no arquivo */
        if(strcmp(nome,pesq)==0){
            printf("Dados encontrados.\n\n");
            printf("Nome: %s\n\n",nome);

            system("pause");
            fclose(arquivo);
            exit(0);
        }
    }

    printf("Nome nao encontrado.\n");
    system("pause");
    fclose(arquivo);/* precisa fechar o arquivo */
    exit(0);
}

 

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

14 horas atrás, devair1010 disse:

@Jemima Fonseca Passos    nesse seu código você esqueceu de pegar a palavra no arquivo antes de comparar com  a variável pesq,  e faltou colocar a quantidade de caracteres da string em nome , pois se não colocar essa quantidade de caracteres, na hora de ler dá erro, o retante está certo .  então seu código ficaria assim :


#include <stdio.h>
#include <string.h>
void consultar();
int main(){
    consultar();
    return 0;
}
void consultar()
{
    FILE *arquivo;
    char nome[30];/* precisa colocar a quantidade de caracteres */

     char pesq[80];
     printf("Digite o nome que deseja consultar. ");
     gets(pesq);
     fflush(stdin);

    arquivo=fopen("membro.txt","r");
    while(fscanf(arquivo,"%s",&nome)!=EOF){/* precisa pegar o nome no arquivo */
        if(strcmp(nome,pesq)==0){
            printf("Dados encontrados.\n\n");
            printf("Nome: %s\n\n",nome);

            system("pause");
            fclose(arquivo);
            exit(0);
        }
    }

    printf("Nome nao encontrado.\n");
    system("pause");
    fclose(arquivo);/* precisa fechar o arquivo */
    exit(0);
}

não esta abrindo o arquivo.

 

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

@Jemima Fonseca Passos     para abrir o arquivo é preciso primeiro criar  o arquivo, e  o arquivo pode ser criado no próprio programa usando esse comando :

arquivo = fopen("membro.txt","w");

e inserir os nomes nesse arquivo usando fprintf .

ou pode criar esse arquivo com o bloco de notas, abra o bloco de notas e digite um texto que você quiser e salve ele na mesma pasta onde foi salvo o seu programa, usando esse nome "membro"  .   então assim seu programa vai conseguir abrir o arquivo .

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!