Compare commits

...

2 commits

Author SHA1 Message Date
fd25b0d1f0 atualização do README 2025-05-01 13:00:46 -03:00
dd6d30fd25 exercícios da aula 13 2025-05-01 12:59:23 -03:00
2 changed files with 51 additions and 2 deletions

View file

@ -33,8 +33,8 @@ qualquer distribuição.
- [[./aulas/09-args/README.org][Aula 9: Argumentos e ambiente]] ([[https://youtu.be/uufnW60rg2Q][vídeo]]) ([[./exercicios/09/README.org][exercícios]])
- [[./aulas/10-dataio][Aula 10: Entrada e saída de dados]] ([[https://youtu.be/b6cbnZlY328][vídeo]]) (sem exercícios)
- [[./aulas/11-scanf][Aula 11: Leitura da entrada padrão com a função 'scanf']] ([[https://youtu.be/MZiI95b2gdY][vídeo]]) ([[./exercicios/11/README.org][exercícios]])
- [[./aulas/#][Aula 12: Leitura da entrada padrão com a função 'fgets']] ([[https://youtu.be/ZZr9HBPo0Oc][vídeo]]) ([[./exercicios/12/README.org][exercícios]])
- [[./aulas/#][Aula 13: Leitura da entrada padrão com chamadas de sistema]] ([[https://youtu.be/bW3Xox6LP_U][vídeo]]) ([[./exercicios/13/README.org][exercícios]])
- [[./aulas/12-fgets][Aula 12: Leitura da entrada padrão com a função 'fgets']] ([[https://youtu.be/ZZr9HBPo0Oc][vídeo]]) ([[./exercicios/12/README.org][exercícios]])
- [[./aulas/13-read][Aula 13: Leitura da entrada padrão com chamadas de sistema]] ([[https://youtu.be/bW3Xox6LP_U][vídeo]]) ([[./exercicios/13/README.org][exercícios]])
- [[./aulas/#][Aula 14: Abertura de arquivos para leitura]] ([[https://youtu.be/uh3UdYyzXRM][vídeo]]) ([[./exercicios/14/README.org][exercícios]])
- [[./aulas/#][Aula 15: Abertura de arquivos para escrita]] ([[https://youtu.be/vL8vy3krcKc][vídeo]]) ([[./exercicios/15/README.org][exercícios]])
- [[./aulas/#][Aula 16: Abertura de arquivos para leitura e escrita]] ([[https://youtu.be/B42KIZfivsg][vídeo]]) ([[./exercicios/16/README.org][exercícios]])

49
exercicios/13/README.org Normal file
View file

@ -0,0 +1,49 @@
#+title: Curso Básico da Linguagem C
#+subtitle: Exercícios
#+author: Blau Araujo
#+startup: show2levels
#+options: toc:3
* Exercícios da aula 13: Leitura da entrada padrão com 'read'
- [[../../aulas/13-read/README.org][Anotações da aula]]
- [[https://youtu.be/bW3Xox6LP_U][Vídeo]]
** 1. Desafio: Função 'readline'
Crie uma função que leia uma única linha digitada no terminal e receba
como único argumento uma string que servirá como prompt.
Características da função:
- Leitura deve ser implementada com a chamada de sistema =read=.
- A função implementa um buffer /estático/ de tamanho =BUFSIZ= (=stdio.h=) para
receber a digitação.
- A leitura continua até uma quebra de linha ou até =BUFSIZ=.
- Consome todos os caracteres digitados, inclusive a quebra de linha.
- Em caso de sucesso, retornará o endereço do buffer estático.
- Testa se está sendo utilizada com pipes e redirecionamentos e termina com
erro, se este for o caso.
- Toda e qualquer situação de erro deve causar retorno =NULL=.
- O prompt é impresso sem quebra de linha.
- Os bytes lidos devem ser convertidos em uma string (terminadas com ='\0'=).
- A quebra de linha deve ser removida da string.
Protótipo da função:
#+begin_src c
char *readline(const char *prompt);
#+end_src
** Desafio: Funções auxiliares
Utilizando a chamada de sistema =read=, implemente as funções abaixo:
- =int str_size(const char *str)=: Retorna a quantidade de bytes da string =str=.
- =void trim_str(const char *str)=: Remove espaços em branco e quebras de linha
nas extremidades da string =str=.
- =char **str_split(const char *str, cont char *delim)=: Transforma uma string em
um vetor de strings separadas na ocorrência do delimitador =delim=.
- =char *str_join(const char *str, const char *glue)=: Transforma um vetor de strings
em uma string única com os elementos do vetor unidos por =glue=.