Guardar entrada estandar en un archivo de texto

Iniciado por gonzaloi, 2 Abril 2011, 23:16 PM

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

gonzaloi

Hola gente !! A ver si alguien me puede ayudar a guardar unos datos que viene desde entrada estandar (tiene saltos de linea) y los quiero guardar tal como viene en un archivo de texto.

Se me ocurrio lo siguiente:

FILE* archivo= fopen("prueba.txt", "wt");
char* entrada;
gets(entrada);
fprintf(archivo, entrada);

Si por ejemplo escribo desde teclado:
Hola
me
llamo
asi

Solo me guarda "Hola". Acaso el printf escribe hasta encontrar un salto de linea ??

Si es asi, que me aconsejan ?????

Desde ya muchas gracias !!

Akai

No, tu problema es que gets si finaliza con el final de linea:

http://cplusplus.com/reference/clibrary/cstdio/gets/

Por otro lado, imagino que el código que has puesto es un mero ejemplo y realmente no estás usando eso... Porque si es el caso,, tienes un problema con el tamaño de "entrada".

gonzaloi

Si es verdad, esta mal puesto, seria char entrada[MAX];

Bueno, voy a ver que hago :S.

Gracias por la ayuda !!

gonzaloi

Es posible guardar en una variable una entrada estandar que tenga saltos de lineas ??? O tendria que ir leyendo linea por linea ??

Akai

Leer linea por linea es la opción más asequible. Para lo otro deberías recurrir si usases C++ al método getline que te permite modificar el carácter que finalzia la linea, cambiando \n por \0.

Por otro lado, no es aconsejable que lo intentes todo de golpe, ya que una de dos, vas a necesitar un buffer enorme por si acaso, o puedes terminar desbordando el buffer si no vas con cuidado.

Como ya dije, hacerlo linea por linea es la opción más sencilla.

gonzaloi

Si tenes razon, pero es para un ejercicio muy simple. Asique no hay problema con el buffer

Lo que me interesa es saber si hay forma de guardar la entrada con saltos de linea en una variable ???

Estoy laburando con C

leogtz

Puedes intentar con algo como esto:

#include <stdio.h>
int main(void)
{
    unsigned int i = 0;
    char c;
    char string[100];
    while((c = getchar()) != EOF)
    string[i++] = c;
    string[i] = '\0';
    printf("\n\nString : [%s]\n", string);
    return 0;
}


Teniendo ya la string, solo la volcas al archivo de texto y ya.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

gonzaloi

Gracias !! Esta buena tu idea !! Por lo visto no existe una funcion que haga el laburo solita.

Saludos !!

leogtz

Creo que no, pero igual puedes hacer el trabajo con lo que te dejé abajo.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com