#+title: Curso Básico da Linguagem C
#+subtitle: Exercícios
#+author: Blau Araujo
#+startup: show2levels
#+options: toc:3

* Exercícios da aula 11: Leitura da entrada padrão com 'scanf'

- [[../../aulas/11-scanf/README.org][Anotações da aula]]
- [[https://youtu.be/MZiI95b2gdY][Vídeo]]

** 1. Desafio: Conversão Milhas->Km e Km->Milhas

Utilizando a função =scanf= para receber os valores digitados no formato:

#+begin_example
<valor>[m, k ou km]
#+end_example

Crie um programa que converta o valor de uma unidade para outra:

- Se a unidade for =k= ou =km=, converter para milhas;
- Se a unidade for =m=, converter para quilômetros;
- Se não houver unidade, presume-se o valor em quilômetros;
- Espaços entre o valor e a unidade devem ser ignorados;
- As unidades podem ser escritas em maiúsculas ou minúsculas;
- Tudo após a unidade deve ser ignorado;
- Valores devem poder ser passados com representações de ponto flutuante;
- Resultados sempre serão impressos em ponto flutuante e duas casas de precisão.

** 2. Desafio: Separação de linhas em campos

Considerando o arquivo =ender.csv=, abaixo:

#+begin_example
Maria das Couves, Rua da Horta, 23, Hortolândia, PR
João da Silva, Av. da Prata, 42, Silverado, RS
Antônio Pereira, Av. dos Pomares, 65, Pomorânia, SP
#+end_example

Crie um programa que, usando =scanf=, liste os dados em cada linha desta forma:

#+begin_example
Nome    : ...
Endereço: ...
Cidade  : ...
Estado  : ...
#+end_example

O programa deve ser executado com:

#+begin_example
./a.out < ender.csv
#+end_example

** 3. Desafio: Implementando um 'cat' com 'scanf'

Crie um programa que, ao ser executado em um pipe ou com um redirecionamento
de leitura, imprima todas as linhas de um arquivo. Se executado sem operadores,
o programa deve imprimir todas as linhas digitadas no terminal antes do
atalho =Ctrl+D=.

Exemplos:

#+begin_example
./a.out < /etc/shells        # Imprime todas as linhas de /etc/shells
cat /etc/shells | ./a.out    # Imprime todas as linhas enviadas pelo cat
./a.out                      # Espera Ctrl+D para imprimir todas as linhas digitadas
#+end_example


