printf() e scanf()

Esta semana aprendi dois truquezinhos (se é que posso chamar assim) que me deixaram um pouco impressionado por nunca ter ouvido falar neles, embora estejam devidamente documentado nas páginas de manual de suas respectivas funções (printf() e scanf()).

O truque de scanf() permite ler strings com espaços. Por exemplo, se você fizer:

scanf("%s", line);

E digitar “foo bar”, scanf() vai ler apenas “foo” em line. Mas se você fizer:

scanf("%[^\n]s", line);

Aí sim, scanf() vai ler “foo bar” em line. Não sei se tem jeito mais fácil e estou com preguiça de ler toda documentação (ah, não esqueça que a maneira recomendada de ler strings é com fgets()).

O que me impressionou mais, no entanto, foi o truque de printf(): você pode passar a quantidade de caracteres a ser impresso por paramêtro, por exemplo:

printf("%.*s\n", 2, line);

Vai imprimir apenas os dois primeiros caracters de line, pois %.*s significa “pegue a quantidade de caracteres a ser impresso no próximo parâmetro”, que neste exemplo é 2.

Resta confirmar se tudo isso faz parte do padrão, mas pelo que diz a documentação creio que faz.

2 Responses to “printf() e scanf()”

  1. Anonymous Says:

    Oi Capitulino!

    Eu não sei se você conhecer o site do codare (codare.net). Acho que seria legal postar estas dicas por lá. O que achas?

    []’s

  2. lcapitulino Says:

    Opa,

    Já ouvi falar. Não sei como eles trabalham, mas sinta-se livre para sugerir a inclusão do meu blog no feed.