Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

ville

Duvida scanf

Mensagens Recomendadas

ville    0
ville

tenho que limitar o numero de strings que entram, para o programa n estourar.

scanf("%50s",string);

esta foi a solução que arranjei. Porém eu quero isto de uma maneira mais flexivel. O que eu queria era algo do genero

scanf("%TAMSTRINGs",string); (eu sei que isto n funciona, era só para perceberem o que eu quero.)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
anolsi    16
anolsi

Bem uma maneira mais lenta, mas que resolve:

char texto[TAMSTRINGs];
for (i=0;i<TAMSTRINGs;i++)
    scanf("%c", texto[i]);
texto[TAMSTRINGs] = '\0'

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ville    0
ville

mas isso não discarda o resto.

suponha que o buffer tem 10 de tamanho.

o utilizador coloca aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.

resultado: segmentation fault.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

char formatstring[10];
sprintf(formatstring, "%%%ds", tamstring);
scanf(formatstring, string);

onde tamstring é um inteiro com o número máximo de caracteres que queres ler.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Baderous    31
Baderous

Aquilo que vais utilizar como formato para guardar a string, no scanf, é o formatstring. Esse formatstring é obtido através do sprintf, que vai guardar nesse formatstring (que foi declarado como uma string), a string "%%%ds", onde o %d vai receber o valor de tamstring. Mas para apresentar numa string o caracter '%', é necessário precedê-lo de 2 '%', pois este é um caracter especial. Assim, efectivamente o que vais ter na string formatstring é "%ds", onde o %d vai ter o valor de tamstring (por ex: se tamstring=40, então formatstring="%40s"). Assim, depois no scanf, vais ter scanf("%40s",string).

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade