Título: Contenidos de fichero en C++ Publicado por: Fyrox en 31 Julio 2012, 02:13 am Saludos, sigo aqui intentando aprender un poquillo de C++ y para practicar un poco los ficheros he creado un programa que simplemente pide nombre y contenido del fichero al usuario y lo crea. El programa queda algo así.
Código
El programa compila bien, y, aparentemente, también se ejecuta bien. El problema es que al pedirte el contenido, nada más pongas un espacio deja de recoger contenido. Es decir, si escribes "Hola que tal." el programa solo escribe "Hola". Supongo que será alguna cosilla que tenga que añadir, pero he buscado y no encuentro la solucion. Gracias de antemano. Título: Re: Contenidos de fichero en C++ Publicado por: BlackZeroX en 31 Julio 2012, 02:27 am usa:
Código
o tambien: Código
un poco mas: http://www.cplusplus.com/reference/iostream/istream/getline/ Dulces Lunas!¡. Título: Re: Contenidos de fichero en C++ Publicado por: rir3760 en 31 Julio 2012, 02:46 am Como ya indico BlackZeroX (Astaroth) para leer una linea de texto de la entrada estándar debes utilizar su función miembro getline (http://www.cplusplus.com/reference/iostream/istream/getline/).
Antes de hacerlo debes descartar el resto de la ultima linea (por lo menos queda el avance de linea o '\n') para que no sea procesada por "getline". Eso lo puedes hacer de varias formas por ejemplo un bucle o utilizando la función miembro "ignore". El programa con ambas correcciones es: Código
Un saludo Título: Re: Contenidos de fichero en C++ Publicado por: Fyrox en 31 Julio 2012, 02:52 am Muchas gracias a los dos por las respuestas tan rapidas :D. En efecto, ahora el programa funciona perfectamente, pero tengo un par de preguntitas:
¿El hecho de que tenga que usar getline es porque uso arrays de tipo char en lugar de poner string? Uso arrays porque así me lo indica el libro con el que estoy aprendiendo, no sé si es más o menos correcto que usar string. rir3760, ¿me podrías explicar como funciona exactamente la siguiente linea? Código No entiendo exactamente su funcionamiento. Un saludo. Título: Re: Contenidos de fichero en C++ Publicado por: BlackZeroX en 31 Julio 2012, 04:20 am cin.ignore(numeric_limits<int>::max(), '\n'); Ya que con solo 1 vez que se oprima el enter (genera el salto de linea '\n') termina la instruccion de lectura en cin... por lo tanto solo se necesita 1 en lugar de numeric_limits<int>::max() pero esto es optativo realmente no afecta en nada. cin.ignore(1, '\n'); * Lo que hace ignore es ignorar N cantidad de veces un delimitador (mínimo 1 vez). http://www.cplusplus.com/reference/iostream/istream/ignore/ * Cuando uses array usa el modo que ya se te indico si usas la clase string: getline(cin, str); // donde str es la variable string Nota la diferencia que no se usa cin.getline() si no solo getline(). Dulces Lunas!¡. Título: Re: Contenidos de fichero en C++ Publicado por: Fyrox en 31 Julio 2012, 18:57 pm De acuerdo. Ahora bien, otro par de preguntillas (siento ser tan pesado xD):
Si quisiera poner el siguiente código dentro de una función aparte, ¿de que tipo deberían de ser sus parámetros? Código
Luego, ¿que es mas recomendado usar para cadenas de caracteres, el tipo string o arrays de tipo char? Muchas gracias :D Título: Re: Contenidos de fichero en C++ Publicado por: ecfisa en 31 Julio 2012, 19:33 pm Hola fyrox.
Proba de este modo: Código
Ejemplo de llamada: Código
Saludos. Título: Re: Contenidos de fichero en C++ Publicado por: BlackZeroX en 31 Julio 2012, 21:28 pm Si no vas a cambiar el contenido de dichas avriables puedes usa los tipos constantes.
Código
Después tendrías que ingresar los try... cath que traten las excepciones posibles con ofstream (para saber si el direcion es posible o imposible de crear o escribir o X cosa). http://c.conclase.net/curso/?cap=043b http://www.cplusplus.com/exception Dulces Lunas!¡. Título: Re: Contenidos de fichero en C++ Publicado por: rir3760 en 1 Agosto 2012, 16:06 pm rir3760, ¿me podrías explicar como funciona exactamente la siguiente linea? Cuando se llama a la función miembro "ignore":Código No entiendo exactamente su funcionamiento. Código Se descartan caracteres del stream "cin" hasta que se cumpla una de dos condiciones: A) Se encuentra el carácter 'ch'. B) Se descartan N caracteres. Otra forma es mediante un bucle: Código
La idea de ambas es descartar el resto de la linea (sin importar el numero de caracteres que la componen). Un saludo |