Add PDF documentation for command line arguments

This commit is contained in:
2026-10-13 22:46:30 -03:00
parent c609be40f8
commit cfaa0ca470
9 changed files with 1610 additions and 110 deletions
+23 -23
View File
@@ -1,9 +1,9 @@
# Capítulo 13 — Entrada y salida estándar (sin archivos)
# Capítulo 14 — Entrada y salida estándar (sin archivos)
> Capítulo intermedio, pero **escrito para que se entienda de verdad**. Se apoya en variables (`02`),
> operadores (`03`), `if` y bucles (`04`), funciones (`05`) y arreglos y cadenas (`06`).
>
> Es el **puente** hacia el capítulo de archivos (`14-archivos`). Todo lo que aprendas acá sobre
> Es el **puente** hacia el capítulo de archivos (`15-archivos`). Todo lo que aprendas acá sobre
> `stdin`, búferes y `EOF` lo vas a reusar tal cual para leer archivos. La única diferencia será que,
> en vez de leer del teclado, vas a leer de un archivo.
@@ -30,7 +30,7 @@ del capítulo.
| **7** | Robustez | Que tu programa no se rompa nunca. |
| **8** | Proyecto final | Construís tu propia consola de comandos. |
Los **ejercicios** se numeran en orden: `13.1`, `13.2`, `13.3`, y así. Cada uno trae su **escenario de
Los **ejercicios** se numeran en orden: `14.1`, `14.2`, `14.3`, y así. Cada uno trae su **escenario de
prueba** (qué entra y qué tiene que salir) para que puedas **comprobar** tu solución.
> **Regla de oro del libro:** el capítulo explica y muestra **cómo funciona** cada cosa, pero **los
@@ -243,7 +243,7 @@ diferencia:
## Práctica de la Parte 1
### Ejercicio 13.1 — Separar la salida útil de los avisos
### Ejercicio 14.1 — Separar la salida útil de los avisos
**Conceptos** · `stdout`, `stderr`, `fprintf`, redirección de salidas
@@ -278,14 +278,14 @@ Aviso: 3 registros tenían fecha inválida.
- [ ] Al correr con `>` y `2>`, cada mensaje cae en su archivo y ninguno aparece en el otro.
- [ ] Usa `fprintf` indicando el flujo (`stdout`/`stderr`) en cada escritura.
### Ejercicio 13.2 — Detective de flujos
### Ejercicio 14.2 — Detective de flujos
**Conceptos** · `stdout`, `stderr`, redirección (`>`, `2>`, `2>&1`), tuberías
**Contexto** · Antes de creer que entendiste los flujos, hay que **verlos**. Vas a conectar el mismo
programa de varias maneras y comparar qué termina dónde.
**Consigna** · Tomá el programa de 13.1 (o escribí uno mínimo que mande una línea a `stdout` y otra a
**Consigna** · Tomá el programa de 14.1 (o escribí uno mínimo que mande una línea a `stdout` y otra a
`stderr`) y corrélo de estas formas, anotando para cada una **qué queda en pantalla** y **qué en cada
archivo**:
@@ -462,7 +462,7 @@ int fgetc(FILE *stream); /* igual que getc, pero siempre es función */
## Práctica de la Parte 2
### Ejercicio 13.3 — Contador de caracteres seguro
### Ejercicio 14.3 — Contador de caracteres seguro
**Conceptos** · `getchar`, `int` vs `char`, `EOF`, bytes altos (`0xFF`)
@@ -496,7 +496,7 @@ Caracteres leídos: 3
- [ ] Termina limpio en `EOF`, sin bucle infinito.
- [ ] El resultado coincide con el tamaño real de la entrada.
### Ejercicio 13.4 — ¿Cuántos saltos de línea hay?
### Ejercicio 14.4 — ¿Cuántos saltos de línea hay?
**Conceptos** · `getchar`, comparación de bytes, `'\n'`, `EOF`
@@ -617,7 +617,7 @@ limpiar los residuos que deja `scanf`. Guardátelo.
## Práctica de la Parte 3
### Ejercicio 13.5 — Protección contra desbordamiento
### Ejercicio 14.5 — Protección contra desbordamiento
**Conceptos** · `fgets` con búfer fijo, truncamiento, detección de líneas largas, descarte del resto
@@ -650,7 +650,7 @@ Aviso: la línea era más larga que el búfer (20 bytes) y fue recortada.
- [ ] El resto de la línea se descarta; no contamina la lectura siguiente.
- [ ] No hay desbordamiento ni comportamiento indefinido.
### Ejercicio 13.6 — Contador de palabras
### Ejercicio 14.6 — Contador de palabras
**Conceptos** · `fgets`, recorrido de una cadena, espacios, bucles
@@ -783,7 +783,7 @@ limpiar es el bucle de 4.5.
## Práctica de la Parte 4
### Ejercicio 13.7 — Corrección de búfer tras `scanf`
### Ejercicio 14.7 — Corrección de búfer tras `scanf`
**Conceptos** · `scanf`, `fgets`, `\n` pendiente, limpieza del búfer
@@ -816,7 +816,7 @@ Nombre: Ana
- [ ] `fgets` obtiene el nombre, **no** una línea vacía.
- [ ] Muestra número y nombre correctos.
### Ejercicio 13.8 — Cuestionario de datos mixtos
### Ejercicio 14.8 — Cuestionario de datos mixtos
**Conceptos** · `scanf`, `getchar`, `fgets`, saltear blancos, orden de lectura, residuos
@@ -854,7 +854,7 @@ Nombre: Juan Gómez
- [ ] No quedan residuos: la lectura del nombre **no** está "corrida".
- [ ] Comprueba los valores de retorno.
### Ejercicio 13.9 — Menú de opciones de longitud fija
### Ejercicio 14.9 — Menú de opciones de longitud fija
**Conceptos** · `getchar`, consumir el resto de la línea, bucles, validación
@@ -1022,7 +1022,7 @@ int main(void) {
## Práctica de la Parte 5
### Ejercicio 13.10 — Validador de edad numérica
### Ejercicio 14.10 — Validador de edad numérica
**Conceptos** · `scanf`, valor de retorno, fallo de conversión, descarte de entrada inválida
@@ -1052,7 +1052,7 @@ Salida: Entrada inválida: se esperaba un número entero.
- [ ] Con un número válido, lo muestra correctamente.
- [ ] No deja la entrada "sucia" para una lectura posterior.
### Ejercicio 13.11 — Extracción de tokens con formato avanzado
### Ejercicio 14.11 — Extracción de tokens con formato avanzado
**Conceptos** · `scanf` con ancho máximo (`%19s`), supresión (`*`), valor de retorno
@@ -1082,7 +1082,7 @@ Salida: valor = 42
- [ ] Extrae el número correctamente en ambos escenarios.
- [ ] Comprueba el retorno de `scanf` (`== 1`).
### Ejercicio 13.12 — La calculadora de una línea
### Ejercicio 14.12 — La calculadora de una línea
**Conceptos** · `scanf` con formato mixto (`%d %c %d`), valor de retorno
@@ -1175,13 +1175,13 @@ Reglas prácticas:
2. **Cuando examinés bytes crudos, usá `unsigned char`.** Comparar `0xC3` contra un `char` con signo
trae resultados confusos.
3. **Un `char` no alcanza para todo símbolo.** Para eso existen `wchar_t` y `char32_t` (capítulo
`15-tipos-stddef`).
`16-tipos-stddef`).
4. **No adivines la codificación.** Si los acentos salen "raros", casi siempre es que la codificación
del texto no coincide con la que espera la terminal.
## Práctica de la Parte 6
### Ejercicio 13.13 — Filtro de terminadores de línea
### Ejercicio 14.13 — Filtro de terminadores de línea
**Conceptos** · `getchar`, `EOF`, `'\n'`, `'\r'`, `'\0'`, distinción de símbolos
@@ -1222,7 +1222,7 @@ d
- [ ] Detecta `'\0'` como byte real `0x00` (no lo confunde con `EOF`).
- [ ] Termina en el primer `EOF`, con la etiqueta `<EOF>` incluida.
### Ejercicio 13.14 — Radiografía de un acento
### Ejercicio 14.14 — Radiografía de un acento
**Conceptos** · `getchar`, bytes altos, UTF-8 multibyte, `unsigned char`
@@ -1359,7 +1359,7 @@ entrada es válida. `strtod` funciona igual, pero para `double`.
## Práctica de la Parte 7
### Ejercicio 13.15 — Bucle robusto ante cierre de terminal
### Ejercicio 14.15 — Bucle robusto ante cierre de terminal
**Conceptos** · `getchar`, `EOF`, corte de bucles, fin de entrada por teclado
@@ -1394,7 +1394,7 @@ Fin de la entrada (EOF). Chau.
- [ ] Con la entrada del ejemplo, informa **11** caracteres y **2** líneas.
- [ ] Muestra un mensaje de cierre y termina.
### Ejercicio 13.16 — Validador de número a prueba de balas
### Ejercicio 14.16 — Validador de número a prueba de balas
**Conceptos** · `fgets`, `strtol`, validación de rango, detección de basura
@@ -1455,7 +1455,7 @@ leer líneas acotadas, interpretar el comando, validar números, manejar residuo
## Ejercicio final
### Ejercicio 13.17 — (JEFE) Simulador de consola de comandos interactiva
### Ejercicio 14.17 — (JEFE) Simulador de consola de comandos interactiva
**Conceptos** · `fgets`, `sscanf`, `stdin`/`stdout`/`stderr`, limpieza de búfer, validación numérica,
`EOF`, corte de bucles, comandos con formato.
@@ -1550,7 +1550,7 @@ tubería con búfer**. Todo lo demás se deduce de ahí.
`EOF`.
- **Un carácter no siempre es un byte**: una `á` son dos bytes.
Y el puente hacia lo que viene: **para C, un archivo es un flujo más**. En `14-archivos` vas a reusar
Y el puente hacia lo que viene: **para C, un archivo es un flujo más**. En `15-archivos` vas a reusar
**exactamente** estas ideas —`fgetc`, `fgets`, `fscanf`, `feof`, los búferes, `EOF`— solo que sobre un
flujo abierto con `fopen` en lugar de sobre `stdin`. Si dominaste este capítulo, el de archivos es
casi el mismo capítulo con una apertura y un cierre.