[C++] Crear archivo .txt [SOLUCIONADO]

Iniciado por DeMoNcRaZy, 14 Mayo 2015, 17:33 PM

0 Miembros y 3 Visitantes están viendo este tema.

DeMoNcRaZy

Buenas,

Estoy probando a crear archivos de textos, guardando datos, etc..

Tengo este código:

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

using namespace std;

int main(){

string nombre;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

if(nombre == "5"){
char cadena[128];
   // Creamos un fichero de salida
   ofstream fs(nombre.".txt");
}
else{
cout << "Nombre no valido." << endl;
}


cin.get();
return 0;
}


Todo funciona bien.

Pero me salta un error acá:

Código (cpp) [Seleccionar]
ofstream fs(nombre.".txt");

Se que es por la variable "nombre.", pero estoy intentando buscar información y no doy con el resultado... y el if no se como ponerlo para que se ejecute si el campo no está en blanco u es un número.

Si me pudieran dar una ayudita u pista lo agradecería.

Un cordial saludo.
Esta página web no está disponible - Google Chrome

Stakewinner00

#1
ejemplo básico hellow world en fichero
Código (cpp) [Seleccionar]

#include <fstream>
#include <string>
#include <iostream>

int main()
{
 std::string name_file;
 std::cin >> name_file;
 name_file += ".txt";
 std::ofstream file(name_file.c_str());
 file << "Hello world";
 file.close();
}


al ofstream se le ha de pasar un const char*

DeMoNcRaZy

Gracias, ya solucioné el problema.

Ahora tengo otro problemilla al leer un string con espacios.

Tengo esto:

Código (cpp) [Seleccionar]
        string nombre;
string texto;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

cout << "Texto: ";
getline(cin, texto);

nombre += ".txt";

ofstream file(nombre.c_str());

file << texto << endl;

file.close();


La variable texto no puedo leerla con "cin" ya que se para en el primer espacio, estoy probando con getline, pero no se guarda el texto.

Gracias.
Esta página web no está disponible - Google Chrome

Stakewinner00

No se que error tienes con el getline, en teoría es algo así
Código (cpp) [Seleccionar]

#include <iostream>
#include <string>
int main()
{
   std::string str;
   getline(std::cin, str);
   
   std::cout << str << std::endl;
}

DeMoNcRaZy

Este es el resultado que me da:



Y este el código:

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

using namespace std;

int main(){

string nombre;
string str;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

cout << "Texto: ";
getline(cin, str);

nombre += ".txt";

ofstream file(nombre.c_str());

file << str << endl;

file.close();

cin.get();
return 0;
}
Esta página web no está disponible - Google Chrome

Stakewinner00

Ya lo modifique un poco

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

using namespace std;

int main(){

string nombre;
string str;

cout << "Introduzca el nombre del archivo: ";
cin >> nombre;

       cin.ignore(2, '\n'); //cin >> nombre guarda el salto de línea en el buffer
                                    //y luego en getline directamente es como si presionaras enter

cout << "Texto: ";
getline(cin, str);

nombre += ".txt";

ofstream file(nombre.c_str());

file.write(str.c_str(), str.size()); //Así también escribe los datos si tiene espacios y demás separadores

file.close();

cin.get();
return 0;
}

DeMoNcRaZy

Gracias,

Ahora mi duda es la siguiente,

Leo el archivo y me aparece todo bien, pero no está bien ordenado.

Me aparece así:



Cuándo debería aparecerme así que es como la tengo guardada:




He probado saltos de líneas, endl, \n, pero se me salta cada palabra en vez de cada frase.

Gracias.
Esta página web no está disponible - Google Chrome

Stakewinner00

el operador >> de ifstream omite los separadores, lo más sencillo es hacer algo tipo

Código (cpp) [Seleccionar]

string str;
while( !file.eof())
{
   char c = file.get();
   str += c;
   if(c == '\n') {
       std::cout << str;
   str = "";
   }
}

DeMoNcRaZy

Cita de: Stakewinner00 en 14 Mayo 2015, 20:27 PM
el operador >> de ifstream omite los separadores, lo más sencillo es hacer algo tipo

Código (cpp) [Seleccionar]

string str;
while( !file.eof())
{
   char c = file.get();
   str += c;
   if(c == '\n') {
       std::cout << str;
   str = "";
   }
}


Gracias por la ayuda, ya lo voy entendiendo todo poco a poco.
Esta página web no está disponible - Google Chrome