Dev - C++ - Ayuda lectura delimitadores

 
Vista:
Imágen de perfil de israel
Val: 4
Ha disminuido su posición en 5 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda lectura delimitadores

Publicado por israel (3 intervenciones) el 10/09/2019 05:06:26
Hola, alguna ayuda o consejo que me puedan dar, para este pequeño problema

Tengo un archivo de texto con datos guardados en el usando como delimitador un @ y un salto de linea para separar cada registo.
pero cuando quiero leerlo algunos de los delimitadores no los toma en cuenta

Que estoy haciendo mal????


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Alumnos::mostrar()
{
    system("CLS");
    char limite[20];
    string cod,nom,car;
    ifstream leer("Alumnos.txt");
    if(!leer.good())
        cout<<"Error al abrir archivo";
    while(!leer.eof())
    {
        leer.getline(limite,20,'@');
        cod=limite;
        leer.getline(limite,20,'@');
        nom=limite;
        leer.getline(limite,20,'@');
        car=limite;
        cout<<cod<<" "<<nom<<" "<<car;
 
    }
    cout<<endl<<endl;
    system("PAUSE");
    leer.close();
}

Captura
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda lectura delimitadores

Publicado por Martín (158 intervenciones) el 10/09/2019 06:22:44
Tienes dos problemas.

El primero de los problemas:

El primer
1
leer.getline(limite,20,'@');
Pone en limite la cadena de texto "34".

El segundo
1
leer.getline(limite,20,'@');
pone en limite la cadena de texto "Ulises"

Y el tercer
1
leer.getline(limite,20,'@');
pone en limite la cadena "compu\n35"
que supongo que no es lo que esperabas.

Esto es así porque el delimitador que determina qué es una línea es '@' y no el salto de línea. Tú se lo has dicho, no te quejes.

El segundo de los problemas:
1
while(!leer.eof())
que es una construcción errada que se repite a lo largo de los últimos 30 años por lo menos; nunca funcionó pero por alguna razón se propaga como la miseria. Fíjate un poco que cuando el programa alcanza la última línea del archivo, la lee sin problema, así que !leer.eof() devuelve true. Luego se intentan leer otras tres líneas, pero falla al primer intento, falla también al segundo y falla al tercero; después de eso igual se ejecuta el
1
cout<<cod<<" "<<nom<<" "<<car;
, y recién ahí es cuando el próximo
1
!leer.eof()
se evalúa como false. Bueno, es mucho más difícil explicarlo que verlo por uno mismo. No insistas con eso, no funciona, nunca funcionó ni funcionará.

// Martín
// Profe de C++
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar