Cómo se entrega un taller
Un programa de verdad no te habla: lee un archivo y escribe otro.
1Por qué
Todos tus programas hasta ahora escriben en la pantalla. Los talleres no funcionan así: te dan un archivo de entrada, y tienes que dejar el resultado en otro archivo. Nadie mira la pantalla — se compara tu archivo con el esperado, y con eso se corrige.
Eso cambia tres cosas, y las tres aparecen en el mismo esqueleto.
Los nombres de los archivos llegan por fuera. Cuando se ejecuta ./programa entrada.txt salida.txt, esas dos palabras llegan a main a través de sus parámetros: argc dice cuántas hay y argv es el arreglo con ellas. argv[0] es el nombre del programa, así que los tuyos empiezan en argv[1].
Se lee con fscanf y se escribe con fprintf, que son scanf y printf con un archivo delante. Lo demás es igual.
Y hay que comprobar que te dieron lo que esperabas. Si faltan argumentos, el programa avisa y termina con un número distinto de cero, que es como un programa dice «esto salió mal». Ese aviso va a stderr y no al archivo de salida: son dos sitios distintos a propósito, para que un error no ensucie el resultado.
Este esqueleto no cambia de taller a taller. Lo que cambia es lo del medio.
2Míralo andar
Este programa funciona. Léelo, y después ejecútalo sin cambiar nada.
#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){if (argc != 3){fprintf(stderr, "Uso: programa entrada salida\n");return 1;}FILE *entrada = fopen(argv[1], "r");FILE *salida = fopen(argv[2], "w");int cuantos;fscanf(entrada, "%d", &cuantos);for (int i = 0; i < cuantos; i++){int n;fscanf(entrada, "%d", &n);fprintf(salida, "%d\n", n * 2);}fclose(entrada);fclose(salida);return 0;}
- línea 4
mainpuede recibir lo que se escribió al ejecutarlo.argccuenta,argvguarda. - línea 6
Tres: el nombre del programa y dos archivos. Comprobarlo antes de usarlos evita leer algo que no existe. - línea 8
El aviso va astderr, no al archivo de salida. Un error no debe ensuciar el resultado. - línea 22
fprintfesprintfcon un archivo delante. Aquí es donde va el resultado del taller.
3Ahora tú
El programa lee cuántos números vienen y después los números. Haz que escriba el CUADRADO de cada uno en el archivo de salida
#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){if (argc != 3){fprintf(stderr, "Uso: programa entrada salida\n");return 1;}FILE *entrada = fopen(argv[1], "r");FILE *salida = fopen(argv[2], "w");int cuantos;fscanf(entrada, "%d", &cuantos);for (int i = 0; i < cuantos; i++){int n;fscanf(entrada, "%d", &n);}fclose(entrada);fclose(salida);return 0;}
↖︎ Tu línea va aquí. Ojo: no va a la pantalla, va al archivo de salida.
Ejecutar
Lo que dice tu programa
↖︎ Escribe tu parte y dale a Ejecutar
Qué pasó
Aquí te aviso si tu programa hace algo raro.
Más adelante vas a ver dónde guarda el computador cada cosa. Todavía no hace falta.