Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Jemima Fonseca Passos

C Programa com arquivos gravar e ler.

Recommended Posts

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

Compartilhar este post


Link para o post
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 .

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
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);
}

 

Editado por devair1010
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • .

    #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();
    }

    .

    Editado por Jemima Fonseca Passos
    • Curtir 2

    Compartilhar este post


    Link para o post
    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] =' ';

     

    Editado por devair1010
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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);
    }

     

    Editado por devair1010
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    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 .

    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






    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

    ×