C++ Ficheros

Hola que tal, de antemano gracias por la ayuda. Mira mi problema es el siguiente, tengo un código el cual carga a un archivo de texto los datos bien, pero cuando quiero visualizar los datos en la pantalla los datos que son char me muestra errores pero los int si me los muestra bien.
ifstream fe;
    char cad[128], c;
    fe.open ("BaseD.txt",ios::in);
    fe >> cad;
    fe.seekg(ob.pos,ios::beg);//inicio fichero
    fe.read((char*)&ob.cod,4);
    cout.setf(ios::left);
    if(ob.cod = 204062);
    fe.read(ob.nom,40);
    cout<<setw(40)<<"Nombre:\t"<<setw(40)<<setfill ("ob.nom")<<endl;
    cout<<setw(8)<<"Codigo:\t"<<setw(40)<<ob.cod<<endl;
    fe.read(ob.ape,40);
    cout<<setw(8)<<"Apellido:\t"<<setw(40)<<ob.ape<<endl;
    cout<<setw(8)<<"Telefono:\t"<<setw(40)<<ob.ape<<endl;
Antes yo imprimía así e imprime nosrmal me imprime todo lo que tiene el fichero, pero quiero es visualizar haciendo una búsqueda, y poder modificar el fichero.
    ifstream fe;
    char cad[128], c;
    fe.open ("BaseD.txt");
    fe >> cad;
    if(fe == NULL){
        cout << "Archivo No Contiene Datos..."<<endl;
    }
    while(fe.get(c)) cout.put(c);
    fe.seekg(0);
    while(fe.get(c)) cout.put(c);
    fe.close();
Espero haber sido un poco claro, mil gracias por tu ayuda.
Saldos

1 respuesta

Respuesta
1
Para poder salir en pantalla un valor NUMÉRICO de 8 bits (un CHAR). Lo tienes que convertir a INT.
Por ejemplo:
char c = 254;
//para verlo correctamente
cout << "Valor = " << (int) c << endl;
Lo mismo en C:  printf("Valor = %d", (int)c);
Si no lo haces así el sistema mete la pata entre código ASCII y valor numérico...
Suerte
Compilo tu código pero no funciona, me dices que tengo que convertir los valores char en int, para poderlos mostrar me podrías explicar un poco mejor no comprendo.
mi correo es [email protected]
Saldos
tu código.. no hay quien lo entienda.
Ponle comentarios, nombres de variables que representan algo.
el IF (if(ob.cod = 204062); es incorrecto un = es differente de == el ";" final hace que tu condicion no hace nada.
Acostumbrate a escribir los if de la manera siguiente: 
If ( condicion)
{
        //Codigo
}
lo mismo con los FOR, WHILE
Cuando a tu problema de salida en pantalla: si te salen caracteres extraños en lugar de cifras es que te falta convertir a INT haciendo lo que te comente:
en lugar de cout << miValor;
pones cout << (int) miValor;
Suerte.
ok mira dejo la funcion imprimir de la siguiente manera haciendo la conversion de char a int.
void imprimir(alumno &ob){
    ifstream fe;
    char cad[128], c;
    fe.open ("BaseD.txt",ios::in);
    fe >> cad;    
    cout << (int) ob.nom;
    fe.close();
    system ("pause");
}
Pero el resultado de pantalla es 1244920, que debería corresponder al campo nombre del archivo de texto.
El archivo de texto contiene esto.
V Nom ape Cod // esto son los titulos de las columnas
s  jhon  cha  20 //contenido del archivo
osea me imprime el nombre que es texto en numero?.
Espero ser un poco claro, mi mil gracias por tu ayuda y tu atención.
Te explico tu programa:
ifstream fe; //declara un stream de entrada
char cad[128], c; //declara una variable cad de 128 caracteres y una variable c que no utilizas nunca
fe.open ("BaseD.txt",ios::in); //abres el archivo de texto
fe >> cad // lees la primera linea del archivo y la copias en la variable cad
cout << (int) ob.nom; //imprimes como un intero el texto contenido en la variable dada en parametro (nada que ver con lo que leiste). No utilizas el dato leido para nada...
Fe. close(); //Cierras el archivo (ya no lo puedes leer)
Lo que realmente quieres hacer es:
Buscar en lo leído si el nombre se corresponde al nombre del alumno y, una vez encontrado, imprimir en pantalla sus datos.
Empieza haciendo:
void imprimir(alumno &ob){ 
    ifstream fe; 
    char cad[128]; 
    fe.open ("BaseD.txt",ios::in); 
    fe >> cad;     
    cout << cad << endl; 
    fe.close(); 
}
de esta manera veras que te funciona la lectura de BaseD.txt
luego puedes parsear a la variable cad utilizando la funcion sscanf por ejemplo. Si quieres hacer todo con STREAM, consulta la pagina: http://c.conclase.net/curso/index.php?cap=039
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas