es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El bucle while debería finalizar después de leer la tercera línea de mi archivo, pero ¿por qué se ejecuta una cuarta vez?

void CargarDesdeArchivo()
{
    ifstream fin("Data.txt");
    //fin.open("Data.txt");
    if (!fin.is_open())
        cout << "Error al abrir el archivo" << endl;
    else
    {
        int f_id;
        int u_id;
        int priority;
        char acc_type;
        char delim;
        while (!fin.eof())
        {

            fin >> f_id;
            fin >> delim; // skipping the comma
            fin >> u_id;
            fin >> delim;
            fin >> priority;
            fin >> delim;
            fin >> acc_type;
        }
        fin.close();
    }
}

Los datos en el archivo son:

7551,10,3,R
25551,3,10,W
32451,4,7,R


El bucle while debería finalizar después de la tercera iteración, pero termina después de la cuarta iteración

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema con el bucle while terminando después de la cuarta iteración se debe al uso de eof() para verificar el final del archivo. eof() devuelve verdadero solo después de intentar leer más allá del final del archivo, lo que significa que el bucle se ejecutará una vez más incluso después de leer el último registro en el archivo. Esto puede causar errores en el programa al intentar leer datos que no existen.

    Para solucionar este problema, se puede utilizar un método alternativo para verificar el final del archivo, como verificar el éxito de la operación de lectura, de la siguiente manera:

    while (fin >> f_id >> delim >> u_id >> delim >> priority >> delim >> acc_type) {
        // procesar datos
    }
    

    De esta manera, el bucle solo se ejecutará mientras todavía haya datos que leer del archivo y se terminará después de leer el último registro sin intentar leer más allá del final del archivo.

Comments are closed.