En este caso traemos un problema que tiene que ver con la lectura de un archivo el cual maneja números reales y números enteros, separados por un pequeño guión, el cual el programa tiene un pequeño menú que les permitirá agregar, mostrar y eliminar.
Ponemos el código explicado lo mejor posible espero les sirva
#include#include #include int main() { printf("Nombre del archivo:numeros.txt\n"); //se declara un puntero para que puedas utilizar el archivo FILE *archivo; //fopen se utiliza para poder abrir archivos, //lleva la ruta como no tiene path significa que se crea en el misma //carpeta donde este el programa //si es con a+ // si no existe el archivo lo crea y aparte permite leerlo // con w solo escribe y te crea uno nuevo cada que lo corres // con r solo es para leer // archivo = fopen("numeros.txt", "a+"); int op; // hice un menu para que pudieras agregar los numeros y puedas consultar lo que // tiene el archivo while (op != 3) { printf("----Menu------\n"); printf("1) Agregar\n"); printf("2) Mostrar\n"); printf("3) Salir\n"); printf("Opcion: "); scanf("%d", &op); switch (op) { case 1: printf("Dame una numero: \n"); // como son dos diferentes tipos de numeros te los agrego como cadena char entrada[30]; // detiene el programa para que puedas ingresar el numero scanf("%s", entrada); // creo una cadena cadGUardar para que tenga el -y le adjunte lo que se leyo char cadGuardar[60]; //copio a la primer cadena el - strcpy(cadGuardar, "-"); //concateno a la cadena lo que se leyó strcat(cadGuardar, entrada); //fputs se utiliza para guardar la cadena al puntero del archivo fputs(cadGuardar, archivo); printf("Se guardo en el archivo\n"); //si imprime ese letrero quiere decir que se guardo break; case 2: //regreso el puntero al inicio del archivo rewind(archivo); //declaro un arreglo para ir almacenando los caracteres leidos char aux[30]; int i = 0; //hago un ciclo hasta que llegue al final del archivo while (!feof(archivo)) { //lee caracter por caracter del archivo char car = fgetc(archivo); //si no es guion lo va metiendo a aux if (car != '-') { aux[i] = car; i++; aux[i] = '\0'; } else // si encuentra el guion { if (i > 0) { //convierte la cadena a double, puede funcionar con float double num = atof(aux); //mando llamar una funcion que esta abajo que permite saber si tiene // el numero decimales, pude haber buscado el . pero lo hago con una // resta if (isDecimal(num)) { //convierte el num en Entero int numEntero = num; //imprime como entero printf("Numero Entero: %d\n", numEntero); } else // si no quiere decir que fue flotante printf("Numero Flotante: %f\n", num); i = 0; } } } // en el ultimo guion hacemos un proceso mas if (i > 0) { //convierte la cadena a double, puede funcionar con float double num = atof(aux); //mando llamar una funcion que esta abajo que permite saber si tiene // el numero decimales, pude haber buscado el . pero lo hago con una // resta if (isDecimal(num)) { //convierte el num en Entero int numEntero = num; printf("Numero Entero: %d\n", numEntero); } else printf("Numero Flotante: %f\n", num); i = 0; } break; case 3: break; default: printf("Opcion incorrecta \n"); } } printf("Salida !!"); fclose(archivo); // cierra el archivo para evitar errores return 0; } //regresa un 0 si es real y un 1 si es entero int isDecimal(double num) { // sacamos la parte entera del numero real int x = num; // creo un double con el numero entero para cuando hagas la resta sea double double x2 = x; // si alrestar el flotante con el entero sobran decimales returna un 0 if (num - x2 > 0) return 0; else // de lo contrario retorna un 1 return 1; }
Link de Github
No hay comentarios:
Publicar un comentario