Buenas,
Estoy probando a crear archivos de textos, guardando datos, etc..
Tengo este código:
#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á:
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.
ejemplo básico hellow world en fichero
#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*
Gracias, ya solucioné el problema.
Ahora tengo otro problemilla al leer un string con espacios.
Tengo esto:
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.
No se que error tienes con el getline, en teoría es algo así
#include <iostream>
#include <string>
int main()
{
std::string str;
getline(std::cin, str);
std::cout << str << std::endl;
}
Este es el resultado que me da:
(http://i.imgur.com/UfcUexP.png)
Y este el código:
#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;
}
Ya lo modifique un poco
#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;
}
Gracias,
Ahora mi duda es la siguiente,
Leo el archivo y me aparece todo bien, pero no está bien ordenado.
Me aparece así:
(http://i.imgur.com/nfYpx0M.png)
Cuándo debería aparecerme así que es como la tengo guardada:
(http://i.imgur.com/VpAUM7R.png)
He probado saltos de líneas, endl, \n, pero se me salta cada palabra en vez de cada frase.
Gracias.
el operador >> de ifstream omite los separadores, lo más sencillo es hacer algo tipo
string str;
while( !file.eof())
{
char c = file.get();
str += c;
if(c == '\n') {
std::cout << str;
str = "";
}
}
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
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.