david-ikki Postado Outubro 16, 2009 Denunciar Share Postado Outubro 16, 2009 :rolleyes:Olá pessoal !!Boa noite......eu estou fazendo alguns exercicios e resolvi usar um struct pôs vi algo sobre este, mas eu rodo o código e quando eu digito um espaço na variavel nome, o programinha da poblema por quê ????Veja código:#include<stdio.h> #include<stdlib.h> struct{ char nome[50]; char endereco[50]; int telefone; }dados; int main() { system("color 1f"); printf("Digite dados:\n\n"); printf("Nome: "); scanf("%s",&dados.nome); printf("\nEndereço: "); scanf("%s",&dados.endereco); printf("\nTelefone: "); scanf("%d",&dados.telefone); printf("\nNome: %s\n",dados.nome); printf("\nEndereco: %s\n",dados.endereco); printf("\nTelefone: %d\n\n",dados.telefone); system("pause"); return(0); }Estou aprendendo a usar o struct se tiverem algum material legal envie....beleza..até +...OBRIGADO. :rolleyes: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Outubro 16, 2009 Denunciar Share Postado Outubro 16, 2009 Tem dois problemas aí... um deles é o seguinte:Quando você usa apenas o nome de um array, sem o indice, isso equivale ao ponteiro/endereço pro próprio array.A função scanf pede como segundo parametro o endereço pra variável onde ele vai guardar o valor lido, por isso você usa o simbolo de endereço (&) geralmente, mas no caso dos array não precisa, por isso que eu disse.Então em vez descanf("%s", &dados.nome);Você usa:scanf("%s", dados.nome);pois dados.nome já é um endereço.O segundo problema é que a função scanf lê apenas palavras e não frases. Então sempre que tiver um espaço em branco ou um enter, ele vai parar de ler.Tem duas soluções... a simples e perigosa:gets(dados.nome);E a complicada e segura:fgets(dados.nome, 50, stdin);(50 é o tamanho maximo que você quer ler)(stdin é o buffer do teclado) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 david-ikki Postado Outubro 16, 2009 Autor Denunciar Share Postado Outubro 16, 2009 Valeu obriado...amigo mnemonic.. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 skyter Postado Outubro 17, 2009 Denunciar Share Postado Outubro 17, 2009 aew mnemonic, pode mi dizer porque usar u gets é perigoso??vlw Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Mnemonic Postado Outubro 17, 2009 Denunciar Share Postado Outubro 17, 2009 aew mnemonic, pode mi dizer porque usar u gets é perigoso??Usando o fgets, você pode limitar o tamanho do buffer a ser lido. Mas usando o gets normal não. Ou seja, se a sua string tem um tamanho [5] e o usuário digitar dezenas de caracteres, esses caracteres após a posição 5 vão ser escritos em posições não reservadas da memória... na melhor das hipóteses vai apenas escrever lixo na memória, mas na pior das hipóteses pode ser usado pra criar alguma brecha de segurança no seu programa (sobrescrever alguma memória adjacente importante) ou travar o programa.Em alguns compiladores, se você usa o gets você recebe um warning. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
david-ikki
:rolleyes:Olá pessoal !!
Boa noite......eu estou fazendo alguns exercicios e resolvi usar um struct pôs vi algo sobre este, mas eu rodo o código e quando eu digito um espaço na variavel nome, o programinha da poblema por quê ????
Veja código:
Estou aprendendo a usar o struct se tiverem algum material legal envie....beleza..até +...OBRIGADO. :rolleyes:
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.