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

ofstream

Estas en el tema de ofstream en el foro de C/C++ en Foros del Web. Intento ingresar una cadena de texto a mi file.txt pero me ingresa la informacion asi ܑ|dp|þÿÿÿ no se pq el codigo es el siguiente: Código: ...
  #1 (permalink)  
Antiguo 17/07/2012, 09:11
 
Fecha de Ingreso: marzo-2011
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 3
ofstream

Intento ingresar una cadena de texto a mi file.txt pero me ingresa la informacion asi
ܑ|dp|þÿÿÿ no se pq el codigo es el siguiente:


Código:
void ingresar_archivo(string line)
{
  ofstream myfile;
  //ifstream registro("example.txt", ios::app);
  myfile.open ("example.txt",ios::app);
  if(myfile.is_open()){
      myfile << line<< "HOLA" << endl;
      myfile.close();
  }else{
      cout << "Imposible abrir el archivo" << endl;
  }
  /* if(registro.bad()){
        cout<<"awdawaw";
        //Mostrar error

    }else{
        cout<< "INGRESANDO";
           registro >> line;
 }
*/
}


void _ingresar()
{
    char nombre[30];
    char sexo;
    int edad;
    system("cls");
    cout<<"Ingrese el nombre: ";
    cin>> nombre;
    cout<<"Ingresar Edad:";
    cin>>edad;
    while(edad < 1 ||  edad > 90  )
    {
        cout<<"usted ha ingresado una edad invalidad, Ingresela nuevamente la edad:";
        cin>> edad;
    }
    cout<< "Ingresar sexo (m=masculino o f= femenino):";
    cin>> sexo;
    char all_char[100];
    strcpy(all_char,nombre+' '+sexo+' '+edad);
    string all(all_char);
    ingresar_archivo(all);
    system("pause");
}
  #2 (permalink)  
Antiguo 19/07/2012, 05:15
Avatar de sephirot47  
Fecha de Ingreso: marzo-2011
Ubicación: BCN
Mensajes: 54
Antigüedad: 12 años, 9 meses
Puntos: 9
Respuesta: ofstream

Realmente no sé porque ocurre, pero por qué no pruebas a pasar el parámetro como (char* line) en vez de string? Quizás es eso.
O si no, si necesitas el string, usa esto: myfile << line.c_str();
Pruebalo.
__________________
Todo lo que tiene un inicio tiene un final inevitable...

¡ No olvides darme karma si te fui útil ^^ !
  #3 (permalink)  
Antiguo 19/07/2012, 13:12
 
Fecha de Ingreso: diciembre-2010
Mensajes: 77
Antigüedad: 13 años
Puntos: 11
Respuesta: ofstream

No se si estaré bien informado o no, pero creo que strcpy solo puede copiar un char a otro char y no una combinación de un array de char un int y otro char, creo que el problema esta ahí.

Puedes solucionar el problema que tienes usando un stream :

Código C++:
Ver original
  1. ostringstream all_char;
  2.  
  3. all_char << nombre << " " << sexo << " " << edad;
  4.  
  5. ingresar_archivo(all_char.str());

Y luego, en la función ingresar_archivo, como dijo @sephirot47, escribe en el fichero con c_str() ya que el stream de ficheros no acepta strings :

Código C++:
Ver original
  1. myfile << line.c_str() << "HOLA" << endl;

Saludos.

EDITO:

No te olvides de incluir sstream, para el stream de string

Código C++:
Ver original
  1. #include <sstream>
__________________
Convert JSON to CSV
  #4 (permalink)  
Antiguo 20/07/2012, 08:44
Avatar de cronopiomx  
Fecha de Ingreso: mayo-2012
Ubicación: Programing Cloud
Mensajes: 282
Antigüedad: 11 años, 6 meses
Puntos: 28
Respuesta: ofstream

prueba esto que escribo use stringstream edadd de #include <sstream>, para convertir la edad que es 1 int a stirng, prueba a ver, le problema es que al concatenar estos 3 resultados dentro de la funcion strcpy no concatena bien y el all_char queda vacio.

s2
cronos

Código:
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
void ingresar_archivo(string line)
{
  ofstream myfile;
  //ifstream registro("example.txt", ios::app);
  myfile.open ("example.txt",ios::app);
  if(myfile.is_open()){
      myfile << line << "\nHOLA" << endl;
      myfile.close();
  }else{
      cout << "Imposible abrir el archivo" << endl;
  }
  /* if(registro.bad()){
        cout<<"awdawaw";
        //Mostrar error

    }else{
        cout<< "INGRESANDO";
           registro >> line;
 }
*/
}


int main ()
{
    stringstream edadd; 	
    char nombre[30];
    char sexo;
    int edad;
    system("cls");
    cout<<"Ingrese el nombre: ";
    cin>> nombre;
    cout<<"Ingresar Edad:";
    cin>>edad;
    while(edad < 1 ||  edad > 90  )
    {
        cout<<"usted ha ingresado una edad invalidad, Ingresela nuevamente la edad:";
        cin>> edad;
    }
    cout<< "Ingresar sexo (m=masculino o f= femenino):";
    cin>> sexo;
    string all_char = "";
    
    all_char += "NOMBRE: "; all_char += nombre; all_char +=", ";
    all_char += "SEXO: ";   all_char += sexo;   all_char += ", ";
    edadd << edad ;
    all_char += "EDAD: ";   all_char += edadd.str();   all_char += ".\n";    

    ingresar_archivo(all_char);
  
    system("pause");
}
  #5 (permalink)  
Antiguo 21/07/2012, 16:50
 
Fecha de Ingreso: marzo-2011
Mensajes: 120
Antigüedad: 12 años, 8 meses
Puntos: 3
Respuesta: ofstream

Excelente muchas gracias :D
  #6 (permalink)  
Antiguo 26/07/2012, 15:23
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años
Puntos: 6
Respuesta: ofstream

Muy interesante los temas que tocan. Yo aún voy aprendiendo lo básico del C++, pero de este tema me han surgido 2 dudas (de teoría más que todo). Espero que me puedan ayudar:

- ¿Cuál es la diferencia entre Stream y Buffer?
Tengo entendido que alguno de ellos (Buffer) existe de manera temporal en la memoria RAM para facilitar las operaciones y que todo se desarrolle con normalidad (sin interrupciones y con mayor eficiencia). Y que lo otro (Stream) en realidad es algo que no existe, sólo es un concepto que se usa para referirse a un flujo de entrada/salida (como al leer un fichero, y el Stream haría referencia al acto de leerlo nada más).

- ¿Cuál es la diferencia de usar un vector de caracteres y string?
Me parece que ambos se pueden considerar como cadena de caracteres, pero en el primero debo definirlo como char y establecer al costadito del nombre del vector su tamaño límite. Con string me parece que no es necesario definir un tamaño máximo pero requiere que haga un #llamado a <string>... La pregunta más que todo estaría referida a la diferencia de sus usos.

Gracias de antemano.
  #7 (permalink)  
Antiguo 26/07/2012, 18:14
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 13 años, 7 meses
Puntos: 228
Respuesta: ofstream

Entre Stream y Buffer no se la direfencia. Me parece que lo que decis esta bien.

Sobre la otra pregunta hay una gran diferencia. String es una clase la cual oculta internamente un vector de caracteres. La clase string se encarga de manejar la memoria. A diferencia del vector de caracteres que vos tenes que hacer las comprobaciones. Por ejemplo, saber el largo de la cadena.

String al ser una clase tiene sobrecargado muchos operadores. Por eso vas a ver que se pueden sumar dos string. Se puede asignar una cadena a un string asi: str = "Hola"; Toda esta operaciones al momento de ser compiladas son reemplazadas a funciones similares que usarias vos con vectores de caracteres.

Basicamente es esa la diferencia de usos.

Etiquetas: int, string
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:43.