Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mariana.duarte

Struct

Recommended Posts

Gente, eu tenho uma certa dificuldade no uso de struct, então eu achei uma questão na Internet pra treinar, mas tem algumas erros, como eu esperava, alguém sabe o que estou fazendo errado? Obrigada ^^

 

CODE
#include<stdio.h>

#include<conio.h>

 

struct data{

int dia,mes,ano;

};

 

struct endereço{

char rua[30],bairro[20];

int numero;

};

 

struct campos{

char nome[80];

int idade;

int telefone[10];

struct data dt;

struct endereço e;

};

 

main(){

struct campos a;

int qtde,i;

 

printf("\nDigite o numero de pessoas que deseja informar:");

scanf("%d",&qtde);

for(i=0;i<qtde;i++)

{

printf("\nNome:\t");

fflush(stdin);

gets(a.nome);

printf("\nIdade:\t");

fflush(stdin);

gets(a.idade);

printf("\nTelefone:\t");

fflush(stdin);

gets(a.telefone);

printf("\nRua:\t");

fflush(stdin);

gets(a.e.rua);

printf("\nBairro:\t");

fflush(stdin);

gets(a.e.bairro);

printf("\nNumero da casa:\t");

fflush(stdin);

gets(a.e.numero);

printf("\n Dia (1 a 31):\t");

fflush(stdin);

gets(a.dt.dia);

printf("\n Mes (1 a 12):\t");

fflush(stdin);

gets(a.dt.mes);

printf("\n Ano: ");

fflush(stdin);

gets(a.dt.ano);

}

for(i=0;i<qtde;i++)

{

printf("\nNome=%s, idade=%d, telefone=%d", a.nome,a.idade,a.telefone);

printf("\nRua=%c, bairro=%c, numero da casa=%d", a.e.rua,a.e.bairro,a.e.numero);

printf("\nData: %d/%d/%d",a.dt.dia,a.dt.mes,a.dt.ano);

}

getch();

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

você nao pode usar a funcao "gets" para inteiros, somente para strings...

creio eu !!!

 

#include<stdio.h>
#include<conio.h>
		struct data{		
			   int dia,mes,ano;		
		};		
		struct endereco{
			   char rua[30],bairro[20];	   
			   int numero;
		};
		struct campos{		
			   char nome[80];		
			   int idade;		
			   int telefone[10];		
			   struct data dt;
			   struct endereco e;		
		};
			   
			   
		main(){	   
			   struct campos a[100];	   
			   int qtde,i;			  
			   printf("\nDigite o numero de pessoas que deseja informar:");	   
			   scanf("%d",&qtde);	   
		for(i=0;i<qtde;i++)		  {		   
			   printf("\nNome:\t");		   
			   fflush(stdin);		   
			   gets(a[i].nome);		   
			   printf("\nIdade:\t");		   
			   fflush(stdin);		   
			   scanf("%d",&a[i].idade);		   
			   printf("\nTelefone:\t");		   
			   fflush(stdin);		   
			   scanf("%d",&a[i].telefone);
			   printf("\nRua:\t");		   
			   fflush(stdin);		   
			   gets(a[i].e.rua);		   
			   printf("\nBairro:\t");		   
			   fflush(stdin);		   
			   gets(a[i].e.bairro);		   
			   printf("\nNumero da casa:\t");		   
			   fflush(stdin);
			   scanf("%d",&a[i].e.numero);		   
			   printf("\n Dia (1 a 31):\t");		   
			   fflush(stdin);		   
			   scanf("%d",&a[i].dt.dia);		   
			   printf("\n Mes (1 a 12):\t");		   
			   fflush(stdin);		   
			   scanf("%d",&a[i].dt.mes);		   
			   printf("\n Ano: ");		   
			   fflush(stdin);		   
			   scanf("%d",&a[i].dt.ano);		  
		}	   
			   for(i=0;i<qtde;i++){		   
							  printf("\nNome=%s, idade=%d, telefone=%d", a[i].nome,a[i].idade,a[i].telefone);		   
							  printf("\nRua=%c, bairro=%c, numero da casa=%d", a[i].e.rua,a[i].e.bairro,a[i].e.numero);		   
							  printf("\nData: %d/%d/%d",a[i].dt.dia,a[i].dt.mes,a[i].dt.ano);		  
			   }
			   getch();}

Compartilhar este post


Link para o post
Compartilhar em outros sites

É isso ai, você nao pode usar o gets pra ler inteiros, somente strings, por isso é que o nome da funcao é gets que significa getString ou pegaString. Mais uma dica, nao se pode usar caracteres especiar para declarar variaveis exempolo: int endereço ou struct endereço...correcto: int endereco ou struct endereco

 

 

Forca ai, e bons estudos http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evite usar gets.Motivo: não faz verificação do tamanho do buffer.Até o compilador diz isso como warning.

 

#include <stdio.h>
int main() {
 char s[5];
 gets(s);
}

 

ib03@mumm:~/src\:gcc t.c

/tmp/ccyKYYTJ.o: In function `main':

t.c:(.text+0x18): warning: the `gets' function is dangerous and should not be used.

 

Do manual da função:

BUGS

Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters

gets() will read, and because gets() will continue to store characters past the end of the buffer, it is

extremely dangerous to use. It has been used to break computer security. Use fgets() instead.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aproveitando o gancho.

Use fgets que limita a entrada de dados.

 

fgets(variavel, tamanho_entrada, stdin)

 

Ex:

fgets(string, 255, stdin);

 

Nesse exemplo se alguém digitar mais que 254 caracteres o restante da entrada é descartado.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.