Ir ao conteúdo

Erro misterioso


Thiago72

Posts recomendados

Postado

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.

Postado

Ed, nesse caso quis declarar que a estruct cadastro só pode armazenar 10 cadastros.

Tenho outros código assim e não deu esse problema.

 

Se puder me dar uma luz do que devo fazer..

 

Valeu aí mano!

Postado

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".
Postado

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");}
Postado

Nem preciso rodar, CPF tem 11 chars (sem usar os símbolos), você precisa de no mínimo 12 posições, toda cadeia de caracteres tem que ter '\0' no final.

 

Esse fim de string é colocado automaticamente pelo gets / scanf/ cin, etc.

Postado

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);
Postado

 

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.

Postado

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");}

Arquivado

Este tópico foi arquivado e está fechado para 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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!