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

.

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

×