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

ville

Duvida scanf

7 mensagens neste tópico

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.)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bem uma maneira mais lenta, mas que resolve:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mas isso não discarda o resto.

suponha que o buffer tem 10 de tamanho.

o utilizador coloca aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.

resultado: segmentation fault.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podia explicar o código sff? :D

basicamente não percebo qual a intenção com o  "%%%ds"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

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