Ir ao conteúdo
  • Cadastre-se

Erro misterioso


Thiago72

Posts recomendados

Fala aí meus amigos.

 

Podem me ajudar em um exercício, logo no começo já to batendo cabeça.

 

O exercício pede o seguinte: 

1º Desenvolver uma aplicação onde receba  uma estrutura de dados que são eles: 

 

::nome

::idade

::cpf

 

recerebr 10 registros completos e passar por parametro para uma função onde ira conter a regra de negocio.

Será feito a ordenação e apos devolvera os numeros para a chamada ja ordenados.

 

Até o momento meu código está assim:

/*ATPS Prof Salgado*/#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct cadastro{	char nome[40];	int idade;	char cpf[11];}cad1;int cont=0; //Variavel contador.cadastro [10]; //A struct cadastro só pode receber até 10 cadastros./*Função que recebe os valores de cada variavel.*/void menu_cadastro(){	printf ("\n\n");	if (cont == 10 || cont > 10) //se cont igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel cadastrar mais clientes!\n");        return;    }    else    {        printf ("\nNome: ");        gets(cadastro[cont].nome);        fflush(stdin);        printf ("\n Idade: ");        scanf ("%s", cadastro[cont].idade);        fflush(stdin);        printf ("\nCPF: ");        gets (cadastro[cont].cpf);        fflush(stdin);    }main(){    menu_cadastro();    system ("Pause");}

O programa para no 1º gets, e daessa mensagem:

"error: request for member 'nome'in a something not a structure or union

 

Que diabo é isso? Sempre usei o gets assim..

Quem puder ajudar agradeço.

 

Obrigado!

 


Caros, tirei o "apelido" da struct e deu certo, porém deu um erro na declaração do "cont".

 

Putz, to muito enferrujado de C.. se puderem me dar uma luz.. valeu mesmo.

Link para o comentário
Compartilhar em outros sites

Eu não sou especialista em C, alguém pode me corrigir se eu falar besteira.

 

Mas até aonde eu sei, a ausência de tipo indica INT.

 

Você declarou o equivalente a int cadastro[10];

 

"error: request for member 'nome'in a something not a structure or union

 
O compilador está exatamente te falando isso, você requisitou membro "nome" em "algo" que não é uma "estrutura ou união".
Link para o comentário
Compartilhar em outros sites

Ed, sua observação foi essencial para eu achar o erro.

Não havia comunicação entre a struct e a função, dei o apelido da typedef struct de cadastro, na sequencia dei o apelido de "cad".

Deu certo!

 

Agora ele não está conseguindo ler o CPF não entendi, se puder tente rodar o codigo abaixo.

Muito obrigado amigo!

/*ATPS Prof Salgado*/#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct{	char nome[40];	int idade;	char cpf[11];}cadastro; int cont;//Variavel contador.cadastro cad[10]; //A struct cad1 só pode receber até 10 cadastros./*Função que recebe os valores de cada variavel.*/void menu_cadastro(){	printf ("\n\n");	if (cont == 10 || cont > 10) //se cont igual a 10, sai do programa, maximo de cadastro 10... (0,1,2,3,4,5,6,7,8,9)    {        printf("Nao e possivel cadastrar mais clientes!\n");        return;    }    else    {        printf ("\nNome: ");        gets(cad[cont].nome);        fflush(stdin);        printf ("\nIdade: ");        scanf ("%d", cad[cont].idade);        fflush(stdin);        printf ("\nCPF: ");        gets (cad[cont].cpf);        fflush(stdin);        getchar();        }}main(){    menu_cadastro();    system ("Pause");}
Link para o comentário
Compartilhar em outros sites

 

Show!

Isso eu não tinha aprendido.

usei o Gets e deu certo, se eu quisesse usar uma variavel int para guardar o cpf como ficaria a linha do meu scanf?

 

Esse:

scanf ("%d", cad[cont].idade);

Ficaria assim?

scanf ("%d\0", cad[cont].idade);

 

Cara, o simbolo '\0' é um char, só se aplica a cadeia de chars.

 

Guardar o CPF como  int seria algo meio sinistro não? Acho que nem caberia em 32bits. Seria o maior desperdício de memória.

Link para o comentário
Compartilhar em outros sites

Ed, entendi, coloquei como char, realmente não fazia sentido deixar como int.

 

Preciso mais uma vez da ajuda de você, o exercicio pede para eu mostrar todos os cadastros em ordem de cadastro, no meu programa ele ja cadastra dando o codigo do cliente em ordem (1.. 2.. 3..) caso eu escolhesse o código ( 7..2..9..18..) como faria para imprimir na ordem do menor para o maior?

 

Segue como está o meu código por enquanto.

/*ATPS Prof Salgado*/#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct{	char nome[40];	char cpf[11];	char idade[3];	int numero_cadastro;}cadastro;int cont;//Variavel contador.cadastro cad[10]; //A struct cad1 só pode receber até 10 cadastros./*Função que recebe os valores de cada variavel.*/void menu_cadastro(){        for (cont=0 ; cont<=9 ; cont++)        {            cad[cont].numero_cadastro = (cont+1);            printf ("\nCadastro %d\n", cad[cont].numero_cadastro);        printf ("\nNome: ");        gets(cad[cont].nome);        fflush(stdin);        printf ("\nIdade: ");        gets(cad[cont].idade);        fflush(stdin);        printf ("\nCPF: ");        gets (cad[cont].cpf);        fflush(stdin);        system ("cls");        printf ("\n Cadastro efetuado com sucesso!\n");        getchar();        system ("cls");    }    printf ("\nNao e possivel acrescentar mais cadastros.\n\n");}main(){    menu_cadastro();    system ("Pause");}
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!