Ler Strings em C [RESOLVIDO]

1. Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 04/10/2011 - 13:47h

Olá. Estou criando um programa em C e preciso ler algumas strings para armazená-las em variáveis de um tipo struct que defini anteriormente.

Sei que é possível ler as strings com a função scanf, mas não quero que os espaços em branco entre as palavras sejam ignorados(ex: "João Pedro").

Qual a melhor função pra fazer isso em C? Segue o código que criei.


#include <stdio.h>

struct Contatos {
char nome[45];
char email[60];
char tel[20];
char cel[20];

};

struct Contatos contato;

int main() {
printf("Digite o nome: ");
scanf("%s", &contato.nome);
printf("Digite o e-mail: ");
scanf("%s", &contato.email);
printf("Digite o numero do telefone: ");
scanf("%s", &contato.tel);
printf("Digite o numero do celular: ");
scanf("%s", &contato.cel);

return(0);

}



Edit: Código alterado segundo a dica do amigo SamL.


  


2. Re: Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 04/10/2011 - 15:32h

Olá. @Sam L, obrigado pela ajuda. Agora, como posso ler essas strings?


3. Re: Ler Strings em C [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 04/10/2011 - 16:12h

Olá, a minha sugestão seria pra modificar o modelo de struct de matriz de char para ponteiro de char, pois se vc foi implementar e criar "contatos" vai desperdiçar memória com nomes menos que 45 letras... alocando de forma dinâmica com malloc.


struct Contatos
{
char *nome;
char *email;
char *tel;
char *cel;
};


OBS: do modo simples que vc demonstrou o seu código, vai simplesmente sair do programa e SÓ... seria mais indicado vc criar uma matriz da estrutura para armazenar vários contatos assim:

struct Contatos pessoa[100];


4. Re: Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 04/10/2011 - 16:46h

gokernel escreveu:

Olá, a minha sugestão seria pra modificar o modelo de struct de matriz de char para ponteiro de char, pois se vc foi implementar e criar "contatos" vai desperdiçar memória com nomes menos que 45 letras... alocando de forma dinâmica com malloc.

[...]OBS: do modo simples que vc demonstrou o seu código, vai simplesmente sair do programa e SÓ... seria mais indicado vc criar uma matriz da estrutura para armazenar vários contatos.[...]



Olá. Meu objetivo é salvar os contatos cadastrados em um arquivo de texto. Como sou iniciante tanto em programação quanto em C, não sei a melhor forma de estruturar meu programa. Se puder me ajudar, agradeço.

Sobre o exemplo que você me passou:


struct Contatos
{
char *nome;
char *email;
char *tel;
char *cel;
};

struct Contatos pessoa[100];


Nesse caso, o número de pessoas que poderei cadastrar é de apenas 100?



5. Re: Ler Strings em C [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 04/10/2011 - 19:09h

[quote]
@White Hawk,

Nesse caso, o número de pessoas que poderei cadastrar é de apenas 100?
[/code]

Sim, neste caso é de apenas 100 .... mas perceba, vc poderá aumentar esse número de acordo com a sua necessidade.

Já que vc é iniciante, acho melhor vc trabalhar com uma MATRIZ DE TAMANHO DEFINIDO.

DICA: para seu melhor aprendizado, faça funcoes de CADASTRAR, VISUALIZAR INDIVIDUAL e VISUALIZAR TODAS funcionando na memória ... deixe pra bem depois a parte de leitura atraves de arquivo.


6. Re: Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 04/10/2011 - 19:52h

gokernel escreveu:

Sim, neste caso é de apenas 100 .... mas perceba, vc poderá aumentar esse número de acordo com a sua necessidade.

Já que vc é iniciante, acho melhor vc trabalhar com uma MATRIZ DE TAMANHO DEFINIDO.

DICA: para seu melhor aprendizado, faça funcoes de CADASTRAR, VISUALIZAR INDIVIDUAL e VISUALIZAR TODAS funcionando na memória ... deixe pra bem depois a parte de leitura atraves de arquivo.


Entendi. Se, porém, eu criar uma uma estrutura de ponteiros char e alocar memória dinamicamente para armazenar os contatos, toda vez que eu fechar meu programa perderei as suas informações, não é?

Sobre a forma que me recomendaste, como é que se aloca memória dinamicamente? Obs: mal sei criar ponteiros.




7. Re: Ler Strings em C [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 04/10/2011 - 20:51h

@White Hawk,
"Entendi. Se, porém, eu criar uma uma estrutura de ponteiros char e alocar memória dinamicamente para armazenar os contatos, toda vez que eu fechar meu programa perderei as suas informações, não é?

Sobre a forma que me recomendaste, como é que se aloca memória dinamicamente? Obs: mal sei criar ponteiros."

01 - Sim vc perderá as informaçoes, exceto se vc salve em um arquivo depois de cada cadastro individual.

02 - Aguarde ... se me sobrar um tempinho amanhã posto(depois das 18 horas) um codigo SIMPLES E COMPLETO de uma pequena agenda. Ok ?

Atualmente estou sem linux, por isso o programa será para windows, certo ?


8. Re: Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 05/10/2011 - 06:47h

Ok, sem problemas. Desde já agradeço sua colaboração.

Até mais.


9. Re: Ler Strings em C [RESOLVIDO]

???
gokernel

(usa Linux Mint)

Enviado em 05/10/2011 - 18:42h

Como Prometido, vai o codigo completo.

Esse programa é bem simples e não usa a memoria com eficiencia por causa do modelo da estrutura...

Cadastra 200 pessoas mas é só mudar o valor de SIZE

EDITADO... EDITADO... EDITADO...

Site com problema em tag "code" para codigos em C.

Veja o programa completo no meu HD VIRTUAL:
http://www.4shared.com/file/1-VTGK27/agenda.html

Ou aqui:
http://codepad.org/WavFY5ZF


10. Re: Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 06/10/2011 - 13:04h

Obrigado! Qualquer dúvida, posto novamente.

Até mais.


11. Re: Ler Strings em C [RESOLVIDO]

White Hawk
WhiteHawk

(usa Ubuntu)

Enviado em 15/12/2011 - 09:26h

Bom dia!

Para aqueles que tiveram ou possivelmente tiverem dificuldades na leitura de strings em C, deem uma olhada:

http://cplusplus.com/reference/clibrary/cstdio/fgets/

Até mais.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts