Ir ao conteúdo
  • Cadastre-se

Struct dando problemas!


Nandaa
Ir à solução Resolvido por Midori,

Posts recomendados

Gostaria que alguém me explicasse porque quando chamo a função dentro do MENU, não consigo mais entrar com o nome do usuário, so consigo entrar com o logradouro e o numero, por que isso acontece ??

Sendo que sem o menu funciona normalmente!

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */FILE *arquivo;typedef struct usuario{	char nome[50];	char logradouro[50];	int numero;};void Cadastro(){	struct usuario aluno;	int i,t1,t2,t3,cod;		arquivo = fopen("lista.txt","a");		printf("\n\tEntre com o codigo do usuario: ");	scanf("%d",&cod);	fprintf(arquivo,"\n\t%d\n\t",cod);		printf("\n\tEntre com o nome do usuario: ");	gets(aluno.nome);		t1 = strlen(aluno.nome);		for(i=0;i<t1;i++){		putc(aluno.nome[i],arquivo);	}		fprintf(arquivo,"\t");		printf("\n\tEntre com o endereco do usuario: ");	gets(aluno.logradouro);		t2 = strlen(aluno.logradouro);		for(i=0;i<t2;i++){		putc(aluno.logradouro[i],arquivo);	}		printf("\n\tEntre com o numero da residencia: ");	scanf("%d",&aluno.numero);	fprintf(arquivo,"\t%d\n\n",aluno.numero);}int main() {	int opcao;	printf("\n\t\t\tMENU\n");	printf("\n\t[1] - Cadastrar novo usuario");	printf("\n\t[2] - Mostrar Lista de cadastrados");	printf("\n\t[3] - Limpar lista de cadstrados");	printf("\n\t[4] - SAIR");	printf("\n\n\tDigite uma das opções: ");	scanf("%d",&opcao);	while((opcao<1)||(opcao>4)){		printf("\n\tOpcao inexistente, digite novamente: ");		scanf("%d",&opcao);	}	switch(opcao){		case 1:			Cadastro();			break;		case 2:			break;		case 3:			break;		case 4:			printf("\n\t\tPROGRAMA ENCERRADO\n");			exit(0);			break;	}	return 0;}
Link para o comentário
Compartilhar em outros sites

Outro problema no mesmo programa. Eu estou tentando ler as informações a partir do arquivo, mas não sei como fazer o programa ler o arquivo inteiro, do jeito que está ele só lê a primeira linha, e entra num loop infinito.  :(

#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>/* run this program using the console pauser or add your own getch, system("pause") or input loop */FILE *arquivo;typedef struct usuario{	char nome[50];	char logradouro[50];	int numero;};void Cadastro(){	struct usuario aluno;	int i,t1,t2,t3;		arquivo = fopen("lista.txt","a");		printf("\n\tEntre com o nome do usuario: ");	while(getchar() != '\n');	    gets(aluno.nome);		t1 = strlen(aluno.nome);		for(i=0;i<t1;i++){		putc(aluno.nome[i],arquivo);	}		fprintf(arquivo,"\n\n");		printf("\n\tEntre com o endereco do usuario: ");	gets(aluno.logradouro);		t2 = strlen(aluno.logradouro);		for(i=0;i<t2;i++){		putc(aluno.logradouro[i],arquivo);	}		fprintf(arquivo,"\tNumero:");		printf("\n\tEntre com o numero da residencia: ");	scanf("%d",&aluno.numero);	fprintf(arquivo,"%d\n\n",aluno.numero);		fclose(arquivo);}//LENDO ARQUIVO (onde está minha dúvida):void MostraLista(){	struct usuario aluno;		arquivo = fopen("lista.txt","r");		while(!feof(arquivo)){		fgets(aluno.nome,30,arquivo);	    printf("%s",aluno.nome);	    fgets(aluno.logradouro,50,arquivo);	    printf("%s",aluno.logradouro);	    fscanf(arquivo,"%d",&aluno.numero);	    printf("%d",aluno.numero);	    fclose(arquivo);			}	}int main() {	int opcao;		do{	    printf("\n\t\t\tMENU\n");	    printf("\n\t[1] - Cadastrar novo usuario");	    printf("\n\t[2] - Mostrar Lista de cadastrados");	    printf("\n\t[3] - Limpar lista de cadstrados");	    printf("\n\t[4] - SAIR");	    printf("\n\n\tDigite uma das opcoes: ");	    scanf("%d",&opcao);	    while((opcao<1)||(opcao>4)){		    printf("\n\tOpcao inexistente, digite novamente: ");		    scanf("%d",&opcao);	    }	    switch(opcao){		    case 1:			    Cadastro();			    break;		    case 2:		    	MostraLista();			    break;		    case 3:			    break;		    case 4:			    printf("\n\t\tPROGRAMA ENCERRADO\n");			    exit(0);			    break;	    }	}while(opcao != 4);		return 0;}
Link para o comentário
Compartilhar em outros sites

  • Solução

Tente rodar com fclose fora do loop.

Mas para facilitar a escrita/leitura em arquivos, eu sugiro que você use sprintf para escrever. E para ler, você pode getc/putchar.

Por exemplo, escrevendo no arquivo com formatação fixa:

#define LBUFFER while(getchar() != '\n')...void cadastra(){    char szNome[30], szLogradouro[30], szLinha[65];    int nNumero;    FILE *fp = fopen("lista.txt", "a");    LBUFFER;    printf("\nNome: ");    scanf("%[^\n]", szNome);    LBUFFER;    printf("\nLogradouro: ");    scanf("%[^\n]", szLogradouro);    LBUFFER;    printf("\nNumero: ");    scanf("%d", &nNumero);    sprintf(szLinha, "%30s %30s %5d\n", szNome, szLogradouro, nNumero);    fprintf(fp, szLinha);    fclose(fp);}
Lendo os registros:

void mostra(){        char ch;    FILE *fp = fopen("lista.txt", "r");    ch = getc(fp);    while(ch != EOF){        putchar(ch);        ch = getc(fp);    }    fclose(fp);}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!