Ir ao conteúdo
  • Cadastre-se

C Manipulação de arquivo e Struct


elyastrid

Posts recomendados

Preciso fazer uma pesquisa de uma string num vetor de 5 posições. Porém, ele não está puxando o nome no arquivo txt. Segue código abaixo.

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

struct questionario{
	char nome[40];
	char sexo[20];
	int idade;
	int renda;
	char fumante[10];
	char esportes[10];
	char atividade[10];
};
void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}
// Exibição do Menu // 
void exibir_menu (int op) {
printf("\n 1-Cadastrar nova entrevista");
printf("\n 2-Pesquisar");
printf("\n 3- Gerar estatisticas\n");
}
int main() {
	struct questionario respostas[5];
	int i,op,posicao;
	char nomepesquisa[40];
	FILE *arquivo;
	
	arquivo= fopen ("resposta.txt", "a");
	
	if (arquivo != NULL) {
		printf ("\n Arquivo aberto com sucesso! \n"); 
	}
	else{
		printf("\n Erro na abertura do arquivo!");
	}

exibir_menu(op);
scanf("%i",&op);
fflush(stdin); // limpa buffer
switch (op) {
    case 1:
	for (i=0;i<5;i++) {
	do {
	printf ("Digite o seu nome:");
	scanf ("%s", respostas[i].nome);
		limpa_linha();
	fprintf (arquivo, "\n Nome: %s ",respostas[i].nome);
	printf ("Digite o seu sexo - F p/Feminino, M p/ Masculino e O p/ Outro: ");
	scanf ("%s", respostas[i].sexo);
		limpa_linha();
	fprintf (arquivo,"Sexo: %s ", respostas[i].sexo);
	printf ("Digite a sua idade:");
	scanf ("%d", &respostas[i].idade);
		limpa_linha();
	fprintf (arquivo, "Idade: %d ", respostas[i].idade);
	printf ("Digite a sua renda:");
	scanf ("%i", &respostas[i].renda);
		limpa_linha();
	fprintf (arquivo, "Renda: %i ", respostas[i].renda);
	printf ("Eh fumante ? - S p/ Sim e N p/ Nao: ");
	scanf ("%s", respostas[i].fumante);
		limpa_linha();
	fprintf (arquivo, "Eh fumante?: %s ", respostas[i].fumante);
	printf ("Gosta de esportes? - S p/ Sim e N p/ Nao:");
	scanf ("%s", respostas[i].esportes);
		limpa_linha();
	fprintf (arquivo, "Gosta de esportes?: %s ", respostas[i].esportes);
	printf ("Pratica atividade fisica ? - S p/ Sim e N p/ Nao: ");
	scanf ("%s", respostas[i].atividade);
		limpa_linha();
	fprintf (arquivo, "Pratica atividade fisica?: %s ", respostas[i].atividade);
	printf ("\n Digite 1 para continuar cadastrando \n");
    scanf ("%i", &op);
}while (op ==1);
    fclose (arquivo);
exibir_menu (op);
scanf("%i",&op);
}
    break;
    case 2:
	printf ("\n Digite o nome:");
	scanf ("%s*c", nomepesquisa);
	limpa_linha();
	do {
	arquivo= fopen ("resposta.txt", "r");
	for (i=0;i<5;i++) {
	 if(strcmp(respostas[i].nome,nomepesquisa)== 0) {
        printf("\n Pesquisa encontrada! ");
        posicao = i;
    } else {
        posicao = -1;
    } 
}
if(posicao = -1) {
    printf(" \n Pesquisa nao encontrada! ");
} else {	
        printf(" \n Nome: %s ", respostas[i].nome);
        printf(" \n Sexo: %s ", respostas[i].sexo);
        printf(" \n Idade: %i ", respostas[i].idade);
        printf("\n Renda: %i", respostas[i].renda);
        printf ("\n Eh fumante?: %s", respostas[i].fumante);
        printf ("\n Gosta de esportes?: %s", respostas[i].esportes);
        printf ("\n Pratica atividade?: %s", respostas[i].atividade);
}
printf ("\n Digite 1 para continuar pesquisando \n");
scanf ("%i", &op);
} while (op==1);
fclose(arquivo);
exibir_menu(op);
scanf("%i", &op);
  break;       
}
    
}

 

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

@elyastrid      antes de pesquisar a string no vetor você precisa cadastrar e depois você faz a pesquisa , mas  esse código não está fazendo pesquisa , então com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cont;
struct questionario{
	char nome[40];
	char sexo[20];
	int idade;
	int renda;
	char fumante[10];
	char esportes[10];
	char atividade[10];
};
void limpa_linha() {
    scanf("%*[^\n]");
    scanf("%*c");
}
// Exibição do Menu //
void exibir_menu(int op){
    printf("\n 1-Cadastrar nova entrevista");
    printf("\n 2-Pesquisar");
    printf("\n 3- Gerar estatisticas\n");
}
int main(){
	struct questionario respostas[5];
	int i,op,posicao;
	char nomepesquisa[40];
	FILE *arquivo;
	arquivo=fopen("resposta.txt","a");
	if(arquivo != NULL)
		printf("\n Arquivo aberto com sucesso! \n");
	else
		printf("\n Erro na abertura do arquivo!");
    do{
    exibir_menu(op);
    scanf("%i",&op);
    fflush(stdin); // limpa buffer
    switch(op){
    case 1:
        if(cont<5)
        do{
            printf("Digite o seu nome:");
            scanf("%s", respostas[cont].nome);
            limpa_linha();
            fprintf(arquivo, "\n Nome: %s ",respostas[cont].nome);
            printf("Digite o seu sexo - F p/Feminino, M p/ Masculino e O p/ Outro: ");
            scanf("%s", respostas[cont].sexo);
            limpa_linha();
            fprintf(arquivo,"Sexo: %s ",respostas[cont].sexo);
            printf("Digite a sua idade:");
            scanf("%d",&respostas[cont].idade);
            limpa_linha();
            fprintf(arquivo,"Idade: %d ",respostas[cont].idade);
            printf("Digite a sua renda:");
            scanf("%i",&respostas[cont].renda);
            limpa_linha();
            fprintf(arquivo,"Renda: %i ",respostas[cont].renda);
            printf("Eh fumante ? - S p/ Sim e N p/ Nao: ");
            scanf("%s",respostas[cont].fumante);
            limpa_linha();
            fprintf(arquivo,"Eh fumante?: %s ",respostas[cont].fumante);
            printf("Gosta de esportes? - S p/ Sim e N p/ Nao:");
            scanf("%s",respostas[cont].esportes);
            limpa_linha();
            fprintf(arquivo,"Gosta de esportes?: %s ",respostas[cont].esportes);
            printf("Pratica atividade fisica ? - S p/ Sim e N p/ Nao: ");
            scanf("%s",respostas[cont].atividade);
            limpa_linha();
            fprintf(arquivo,"Pratica atividade fisica?: %s ",respostas[cont].atividade);
            printf("\n Digite 1 para continuar cadastrando \n");
            scanf("%d",&op);
            cont++;
        }while(op ==1 && cont<5);
        fclose(arquivo);
        break;
    case 2:
	    printf("\n Digite o nome:");
	    scanf("%s",nomepesquisa);
	    limpa_linha();
	    do{
	        arquivo= fopen("resposta.txt","r");
	        posicao = -1;
            for(i=0;i<5;i++){
	            if(strcmp(respostas[i].nome,nomepesquisa)== 0){
                    printf("\n Pesquisa encontrada! ");
                    posicao = i;
                    break;
                }
            }
            if(posicao == -1)
                printf(" \n Pesquisa nao encontrada! ");
            else{
                printf("\n Nome ---------------: %s",respostas[i].nome     );
                printf("\n Sexo ---------------: %s",respostas[i].sexo     );
                printf("\n Idade --------------: %i",respostas[i].idade    );
                printf("\n Renda --------------: %i",respostas[i].renda    );
                printf("\n Eh fumante? --------: %s",respostas[i].fumante  );
                printf("\n Gosta de esportes? -: %s",respostas[i].esportes );
                printf("\n Pratica atividade? -: %s",respostas[i].atividade);
            }
            printf("\n Digite 1 para continuar pesquisando \n");
            scanf("%d",&op);
        }while(op==1);
        fclose(arquivo);
        break;
    }
    }while(op!=3);
}

 

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!