Queria saber si se puede guardar una caddena con espacios en blanco y guardarlo en una variable de una estructura y luego guardarla en un fichero y que te pueda leer la cadena esa con sus espacios al leer el fichero, eso es posible?
pongo un ejemplo para que me entendais, faltaria la escritura y lectura a fichero
#include <iostream>
using namespace std;
struct datos{
char texto[100];
};
int main(){
struct datos persona;
cout<<"Introduce texto"<<endl;
cin>>persona.texto; // Aqui escribiriamos por ejemplo -> esto es una prueba con espacios
cout<<persona.texto;
}
No entiendo la pregunta, no te almacena en persona.texto el texto con espacios?
#include <cstdio>
int main()
{
char cadena[100];
fgets(cadena, 100, stdin);
printf("%s", cadena);
getchar();
return 0;
}
El texto se queda guardado en la cadena, que lógicamente puedes escoger el tamaño que te convenga, y simplemente luego abres el fichero y escribes el contenido. Igual no estaría de más que leyeras sobre cadenas y las funciones básicas de input y output:
http://www.cplusplus.com/doc/tutorial/arrays/ (http://www.cplusplus.com/doc/tutorial/arrays/)
http://www.cplusplus.com/doc/tutorial/basic_io/ (http://www.cplusplus.com/doc/tutorial/basic_io/)
cin sólo lee hasta el primer espacio.
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.
Por supuesto que puedes leer una cadena con espacios y guardarla en un fichero, el espacio es un carácter como cualquier otro.
Usando cin de esta manera, solamente puedes hasta el primer espacio en blanco.
ok todo aclarado mil thnks ! ; )
¿Pero qué método usarás al final?
pues aun no lo se, voy a probar varias y la que vea que mejor va, probare estas 2 de momento pero ya mañana que madrugo y sino luego no me tengo, ya os contare cual me fue mejor y el codigo por si le es de utilidad a alguien
fgets(cadena, 100, stdin);
string cadena;
getline(cin,cadena);
Buena ya estoy con el codigo que mas o menos lo tengo salvo que cuando hace la segunda vez el bucle al introducir s me carga la cadena sola sin yo introducirle nada, alguien ve algun fallo?
#include <iostream>
#include <fstream>
using namespace std;
void escribe(char **name){
ofstream fs("pw");
fs<<*name<<endl;
fs.close();
}
void lee(char **cadena){
ifstream fe("pw");
fe.getline(*cadena,30);
cout<<*cadena<<endl;
fe.close();
}
int main(void){
int cont=0;
char **cad;
char resp='s';
cad=new char *[100];
do{
cad[cont]=new char[100];
cout<<"Cadena?: ";
fgets(cad[cont],100,stdin);
cont++;
escribe(cad);
lee(cad);
cout<<"Mas [s/n]?: ";
cin>>resp;
}while(resp=='s');
for(int i=0;i<cont;i++)
delete[]cad[i];
delete[]cad;
return 0;
}
Aquí te dejo tu código corregido ...
#include <iostream>
#include <fstream>
using namespace std;
void escribe(char **name, int cont){
ofstream fs("pw.txt");
for( int i = 0; i < cont; i++){
fs<<name[i]<<endl;
}
fs.close();
}
void lee( int cont){
char cadena[100];
ifstream fe("pw.txt");
for( int i = 0; i < cont; i++){
fe.getline(cadena,100);
cout<<cadena<<endl;
}
fe.close();
}
int main(void){
int cont=0;
char **cad;
char resp='s';
cad=new char *[100];
do{
cad[cont]=new char[100];
cout<<"Cadena?: ";
cin.getline(cad[cont],100);
cont++;
escribe(cad, cont);
lee(cont);
cout<<"Mas [s/n]?: ";
cin>>resp;
while(getchar()!='\n'); // esto elimina la basura del buffer que hacía que se salte la lectura de la cadena.
}while(resp=='s');
for(int i=0;i<cont;i++)
delete[]cad[i];
delete[]cad;
return 0;
}
El error en tu código está en que tú asumes que *cad es el conjunto de todos los cad[n], pero no es así, *cad es igual - únicamente - a cad[0], ya que *cad sólo apunta a la dirección del 1r elemento de ese vector de cadenas.
Muchas gracias tio!! eres un maquina ; )