Add PDF documentation for command line arguments
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user