• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pakito87

Receber strings, com espaços para uma estrutura

6 mensagens neste tópico

Boas pessoal eu estou aqui com uma duvida, que é a seguinte estou a fazer um programa e deparei-m que qd faço scanf %s para receber o nome do user para o inserir na devida estrutura, a sting apenas é detectada a até ao primeiro espaço. sendo assim recorri ao gets(); mas este é pouco aconselhável, sendo assim gostaria de obter uma maneira melhor de preencher esse mesmo campo. Testei o artigo que está na wiki e vá se saber porque qd executo o programa ou salta o campo ou atrofia todo.

o código que tenho é basicamente

printf("Insira o nome do aluno \n");

scanf("%s",&((inserir+contapos_al)->nome);

ouvi falar no sscanf mas não encontrei mta informação da cerca do mesmo, alguma sugestão?

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o fgets (semelhante ao gets, mas seguro), ou também podes usar o scanf, dando-lhe indicação para ler até encontrar um \n (penso que será mais ou menos isto: scanf("%20[^\n]",string)).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o problema é que qd faço o scanf("%*[^\n]"...);

é saltado o campo ou seja para o próximo scanf, experimentei usar o fflush(stdin); mas tb não resolve não sei sé é por usar Mac, pode não contar na biblioteca o que duvido...

bem no entanto vou tentar com o fgets();

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
scanf("%*[^\n]"...); salta o campo porque é isso que o * quer dizer. Se removeres o * já não salta o campo, ou se colocares lá um inteiro também não (é aconselhável colocar um inteiro, o número máximo de caracteres a ler, caso contrário o scanf fica tão inseguro como o gets).
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

com o scanf não estou a conseguir devo ter algum erro de codigo, vou tentar com o fgets()

thks pela ajuda :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já sei porque o scanf(%[\n],..); era de ter outro scanf pro cima, e ele detectava o \n dado por ele, resolvi ponto um getchar() antes ;)...

thks pela dica

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora