deboraddo 0 Denunciar post Postado Janeiro 2, 2015 Boa tarde gente, Estou fazendo um exercício que você tem que fazer uma struct com endereço como rua, número, etc. Meu código dá certo se eu não utilizo o espaço, ou seja, com apenas uma palavra. Acho que deve estar errado o modo como fiz o scanf nas variaveis. Já procurei na internet mas não encontrei nenhuma solução. Alguém poderia me ajudar? Por favor, não me caçoem, ainda estou no primeiro período :( #include <stdio.h> #include <stdlib.h> #include <string.h> //Questão 01 int main() { printf("<< Endereços! >>\n"); struct enderecos { char rua[30]; char comp[30]; char cidade[30]; char estado[3]; int num[3]; int cep[3]; }; struct enderecos end; int i; for(i=0;i<=2;i++) { printf ("%d Rua: ", i+1); scanf("%s", &end.rua); printf("%d Numero: ", i+1); scanf("%d", &end.num); printf("%d Complemento: ", i+1); scanf("%s", &end.comp); printf("%d Cidade: ", i+1); scanf("%s", &end.cidade); printf("%d CEP: ", i+1); scanf("%d", &end.cep); strcpy(end.estado, "MG"); } printf ("Enderecos"); for (i=0;i<=2;i++) { printf ("\n %d endereco\n: RUA %s\n NUM %d\n COMP: %s\n CIDADE: %s\n ESTADO: %s\n CEP:%d\n", i+1,end.rua, end.num, end.comp, end.cidade, end.estado, end.cep); } return 0; Compartilhar este post Link para o post Compartilhar em outros sites
cahe7cb 27 Denunciar post Postado Janeiro 2, 2015 Para ler strings incluindo espaços você pode fazer com que o [inline]scanf[/inline] leia até a quebra de linha, representada pelo caractere [inline]\n[/inline], que é quando o usuário da enter: scanf("%[^\n]s",end[i].rua); Quando se usa alguma formatação avançada o [inline]scanf[/inline] pode acabar deixando restos no buffer de leitura, então recomendo limpar o buffer a cada leitura, algo como: scanf("%[^\n]s",end[i].rua); // ler rua scanf("%*c"); // limpa o buffer scanf("%[^\n]s",end[i].comp); // ler complemento scanf("%*c"); // limpa o buffer scanf("%[^\n]s",end[i].cidade); // ler cidade scanf("%*c"); // limpa o buffer // (...) resto das leituras Recomendo este tópico que fala sobre limpeza de buffer. Compartilhar este post Link para o post Compartilhar em outros sites
Fabiano Amaral 3 Denunciar post Postado Janeiro 2, 2015 O scanf costuma ser muito problemático quando se usa char, eu costumo usar o fgets.. exemplo de uso do fgets char nome[30]; fgets(nome,30,stdin); isso evita muitos problemas com buffer e estouro do tamanho, já que eu passo pro fgets a variável o tamanho dela e por onde tá sendo a entrada(como é teclado fica stdin(standard input) se fosse uma stream você colocaria a variavel que representa o arquivo :) Compartilhar este post Link para o post Compartilhar em outros sites