#+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 [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