Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problemas al leer archivo txt desde c++

Estas en el tema de Problemas al leer archivo txt desde c++ en el foro de C/C++ en Foros del Web. Buenas amigos del foro!! Recien empiezo a utilizar archivos en c++ e inmediatamente me surgio un problema!! Este es el codigo: Código: #include "enlace.h" int ...
  #1 (permalink)  
Antiguo 31/10/2013, 23:19
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 10 meses
Puntos: 6
Problemas al leer archivo txt desde c++

Buenas amigos del foro!!

Recien empiezo a utilizar archivos en c++ e inmediatamente me surgio un problema!!

Este es el codigo:

Código:
#include "enlace.h"

int main()
{
    char ciclo,codigo[20],pass[20],acod[20],apass[20];
    int c=0,i=0;
    reg = fopen("empleados.txt","r");

    system("color F1");

    do
    {
        system("cls");
        cout<<"SISTEMA IDENTIFIQUESE\n\n\n";
        
        cout<<"Codigo de empleado: ";
        cin>>codigo;
        cout<<"Password: ";
        cin>>pass;
        while(c!=EOF)
        {
            fscanf(reg," %[^\t]",acod);
            c=fscanf(reg," %[^\n]",apass);

            cout<<endl<<acod<<endl<<apass<<endl;

            if(!strcmp(codigo,acod)&&!strcmp(apass,pass))
                cout<<"entrando"<<endl<<endl;

        }
        cout<<"Pass incorrecto\n\nDESEA CONTINUAR s/n";
        c=0;
        fclose(reg);
        ciclo=getch();
    }while(ciclo=='s'||ciclo=='S');
    return 0;
}

Recive dos datos como un loging "codigo" y "pass" despues los compara con los datos de mi txt que serian los siguientes!!

juan 87654
pedro 12344
luis 32145

entonces al ejecutar el programa arranca bien ingreso codigo y pass y me sale el mensaje entrando e imprime todos los datos que estan en el txt

pero si intento loguear de nuevo no me manda el mensaje de entrando a menos que ingrese los datos de la ultima linea.

y me imprime solo la ultima linea ya no lee el archivo desde el principio!!

alguna ayuda que me puedan dar con este problema les estare muy agradecido :D
  #2 (permalink)  
Antiguo 01/11/2013, 01:55
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Problemas al leer archivo txt desde c++

creo que te falla en EOF (abreviatura de end-of-file, fin de fichero en inglés)
Por eso no entras al bucle creo
creo que cierras el fichero dentro del bucle y solo lo abres fuera del bucle.
O sea para que puedas escribir en el debes de abrirlo antes, eso solo se ve que esta abierto antes del bucle.
Al final del bucle lo cierras y ya no se vuelve a abrir.
creo que la solucion seria poner la linea reg = fopen("empleados.txt","r"); dentro del bucle primario al principio
Código C++:
Ver original
  1. #include "enlace.h"
  2.  
  3. int main()
  4. {
  5.     char ciclo,codigo[20],pass[20],acod[20],apass[20];
  6.     int c=0,i=0;
  7.     reg = fopen("empleados.txt","r"); // Abres el archivo al principio y lo cierras al final del bucle primario, pero no lo vuelves a abrir...
  8.                                                           // ...dentro del bucle primario.
  9.  
  10.     system("color F1");
  11.  
  12.    
  13.     do  // al estar abierto el fichero el código funciona una vez y al final se cierra lo que te imposibilita que entre al bucle interno
  14.     {
  15.         reg = fopen("empleados.txt","r"); //Aqui antes de usar el fichero lo deberías abrir ya que lo cierras al final.
  16.  
  17.         system("cls");
  18.         cout<<"SISTEMA IDENTIFIQUESE\n\n\n";
  19.        
  20.         cout<<"Codigo de empleado: ";
  21.         cin>>codigo;
  22.         cout<<"Password: ";
  23.         cin>>pass;
  24.         while(c!=EOF)   // Aquí se evalúa si no estas en el final del fichero, como lo tienes cerrado el fichero no se da esta condición, aquí ...  
  25.                                  // ...creo que falla, la segunda vez que llegas aquí el fichero esta cerrado y saltas todo el bucle este XD
  26.         {
  27.             fscanf(reg," %[^\t]",acod);
  28.             c=fscanf(reg," %[^\n]",apass);
  29.  
  30.             cout<<endl<<acod<<endl<<apass<<endl;
  31.  
  32.             if(!strcmp(codigo,acod)&&!strcmp(apass,pass))
  33.                 cout<<"entrando"<<endl<<endl;
  34.  
  35.         }
  36.         cout<<"Pass incorrecto\n\nDESEA CONTINUAR s/n";
  37.         c=0;                        //Aun que vuelvas esto a 0 al usar fclose abajo ya no tienes fichero abierto para que tu ...
  38.                                        //...bucle interno vuelva a trabajar.
  39.         fclose(reg);             //Una segunda solución seria no cerrar el fichero dentro del bucle ya que la c le pones a 0 asi no lo tendrias que...
  40.                                        //...que volver a abrir.
  41.         ciclo=getch();
  42.     }while(ciclo=='s'||ciclo=='S');
  43.  
  44.     //Aquí es donde deberías poner fclose si no quieres estar abriendo y cerrando el fichero 500 pares de veces XDD
  45.  
  46.     return 0;
  47. }

No puedo probar tu programa por que falta el fichero.h de la cabecera pero creo que el error es este que puse.
Si no es así a ver si alguien mas sabe algo, si puedes subir el otro fichero.h podemos probar a ver donde falla.
Saludos y suerte!

Última edición por vangodp; 01/11/2013 a las 05:04
  #3 (permalink)  
Antiguo 01/11/2013, 09:39
 
Fecha de Ingreso: julio-2011
Ubicación: guadalajara mX
Mensajes: 84
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Problemas al leer archivo txt desde c++

Cita:
Iniciado por vangodp Ver Mensaje
creo que te falla en EOF (abreviatura de end-of-file, fin de fichero en inglés)
Por eso no entras al bucle creo
creo que cierras el fichero dentro del bucle y solo lo abres fuera del bucle.
O sea para que puedas escribir en el debes de abrirlo antes, eso solo se ve que esta abierto antes del bucle.
Al final del bucle lo cierras y ya no se vuelve a abrir.
creo que la solucion seria poner la linea reg = fopen("empleados.txt","r"); dentro del bucle primario al principio
wow muchas gracias !! esas cosas tan simples que nos complican la vida :D pero en equipo es mucho mas facil

muchas gracias
  #4 (permalink)  
Antiguo 01/11/2013, 12:55
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Problemas al leer archivo txt desde c++

De nada compañero, soy bien novato aun sobre todo con los ficheros jeje.
Me estoy liando con gráficos 2d de SDL2 y de momento nunca eh tocado un fichero en mi vida jaja.
Solo que me acuerdo que eh leído si sobre eso y me quedo bien grabado que para poder escribir hay que tener abierto el fichero si lo cierra no puedes realizar operaciones sobre el.
Cualquier día me toca a mi venir a preguntar sobre ficheros jajaj.
Entonces espero que estés afinado. :D

Etiquetas: int, programa, txt
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:06.