Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - .:BlackCoder:.

#11
Cita de: Littlehorse en 12 Marzo 2011, 21:55 PM
ent.read devuelve NULL en lugar de *this

Gracias  :D, no sabia esa parte, crei que devolvia *this, y si ponia el failbit en mal estado...

Cita de: Littlehorse en 12 Marzo 2011, 21:55 PM
En la ultima lectura se establece failbit

Pero si en la ultima se establece failbit porque esto no funciona?

Código (cpp) [Seleccionar]
while(!ent.fail()){
        ent.read(reinterpret_cast<char *> (&aux),sizeof(Personas));
        cout<<aux.getNombre()<<endl<<aux.getEdad()<<endl;
    }


Yo creo que ciertamente devuelve null en vez de *this por el error... pero no establece por si sola el failbit en mal estado...

Hice esto para usar la condicion con good(), no muestre el de nuevo el ultimo registro... Y no poner la lectura en la condicion del while (se ve raro xD)
Código (cpp) [Seleccionar]
    while(ent.good()){
        if (ent.read(reinterpret_cast<char *> (&aux),sizeof(Personas)))
            cout<<aux.getNombre()<<endl<<aux.getEdad()<<endl;
        }



Saludos...
#12
Probe y si funciona pero no comprendo bien que sucede... read() devuelve un flujo, cierto? Cuando haces:
Código (cpp) [Seleccionar]
while(!ent.eof() && ent.read(reinterpret_cast<char *> (&aux),sizeof(Personas)))

aca la segunda condicion se cumple siempre y cuando no "lea" el eof...?

Crei que era lo mismo que:

Código (cpp) [Seleccionar]
while(ent.good())

Pero nop... Es que acaso el flujo "ent" no se coloca en mal estado cuando lee el EOF?...
#13
Buenas, estaba retomando el tema de archivos pero me quede estancado  :xD

Código (cpp) [Seleccionar]
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

class Personas{
   private:
       char Nombre[30];
       int edad;
   public:
       Personas(char *x="",int e=0){
           strcpy(Nombre,x);
           edad=e;
       }
       const char* getNombre() const{
           return Nombre;
       }
       int getEdad() const{
           return edad;
       }
       void setNombre(const char cad[]){
           strcpy(Nombre,cad);
       }
       void setEdad(const int e){
           edad=e;
       }
};

void mostrar(){
   ifstream ent("PRUEBA.dat",ios::in | ios::binary);
   Personas aux;
   
   while(!ent.eof()){
       ent.read(reinterpret_cast<char *> (&aux),sizeof(Personas));
       cout<<aux.getNombre()<<endl<<aux.getEdad()<<endl;
   }
    ent.close();
}

int main(int argc, char *argv[])
{
   Personas persona("ALGUIEN",50);
   Personas persona2("Otro",20);
   
   ofstream sal("PRUEBA.dat", ios::out | ios::binary);
   
   sal.write(reinterpret_cast<char *>( &persona ), sizeof(Personas));
   sal.write(reinterpret_cast<char *>( &persona2 ), sizeof(Personas));
   sal.close();
   
   mostrar();
   
   system("PAUSE");
   return EXIT_SUCCESS;
}


El programa muestra 2 veces el ultimo registro es decir, muestra:

ALGUIEN
50
Otro
20
Otro
20


Por que?
#14
Creo que debes asignarle memoria a esas cadenas... O hazlo asi:

Código (cpp) [Seleccionar]

typedef char strings[30];


Saludos...
#15
leete el post que se llama "lo que no se debe hacer en C/C++" algo asi,  esta fijo aca en esta sección, es decir esta entre los primeros, ahi te dicen como leer las cadenas de caracteres y te hablan del buffer...
#16
Pes pon que si no es la primera iteracion de for o muestre con la ',' primero y sino que lo muestre sin la ','...

Saludos
#17
Programación C/C++ / Duda con validacion...
26 Febrero 2011, 17:52 PM
En este code... Que valida la entrada de un entero...

Código (cpp) [Seleccionar]
  int numero, cont = 0;
  bool continuar;

  do {
     continuar = false;
     cin.clear();
     if(cont > 0) cin.ignore(1024, '\n');
     cout << "Introduce un numero: ";
     cin >> numero;
     cont++;
     if(cin.fail() && cin.rdstate()){
        cout << "NO ES UN NUMERO" << endl;
        continuar = true;
     }
  } while (continuar);


Por que 1024? De hecho funciona hasta con 1... yo crei que funcionaria con un simple cin.ignore( '\n');  

Pero nop  :xD

Saludos...

EDIT:

Ya vi el por que, mejor hacerlo asi:

Código (cpp) [Seleccionar]
int x;
    do{   
        if (!cin){
            cin.clear();
            while (cin.get() != '\n');
        }           
        cout<<"dame x: ";
        cin>>x;
       
    }
    while(!cin);


:)
#18
Creo que debes asignarle memoria a aux en tu funcion...

Saludos...
#19
Hola, pes esa es la duda, alguien ha usado, o sabe que uso tienen las hiperbolas o los elipses en la programacion? o en la computacion?...
Existe la posibilidad de que me pregunten eso y no tengo idea  :-\

Saludos...
#20
Bueh, solo dire que el hecho de que corra no significa tanto... Pero hazlo como quieras...