Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda sobre escribir archivos de texto

Estas en el tema de Duda sobre escribir archivos de texto en el foro de C/C++ en Foros del Web. Hola maestros... tengo una duda... la cosa es que logro escribir todo bien en un archivo de texto con este código Código: int escribir(void) { ...
  #1 (permalink)  
Antiguo 23/05/2006, 22:24
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 6 meses
Puntos: 16
Duda sobre escribir archivos de texto

Hola maestros... tengo una duda... la cosa es que logro escribir todo bien en un archivo de texto con este código

Código:
int escribir(void)
{
    FILE *bd;
    char nombre[100];

    bd = fopen("bd.txt","a");
    
    if (bd == NULL)
       printf( "Problemas con los ficheros.\n" );
    
    printf("Escriba el nombre de la pel%ccula\n", 161);
    scanf(" %[^\n]", nombre);
    
    fputs(nombre,bd);

    if (fclose(bd)!=0)
       printf("Problemas al cerrar el fichero bd.txt\n");
    else
       fclose(bd);
}
el problema esta cuando leo la cadena nombre, como leo todo hasta el "\n" (salto de linea), al llamar denuevo a la funcion en vez de escribir en la linea de abajo como deberia hacerlo, lo escribe inmediatamente despues... como puedo solucionar esto??

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 23/05/2006, 23:20
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 6 meses
Puntos: 16
ya la resolvi...

Código:
int escribir_pelicula()
{
    FILE *peliculas;
    char nombre[100];
    char genero[50];
    char num_copias[4];

    peliculas = fopen("peliculas.txt","a");
    
    if (peliculas == NULL)
    {
       printf( "Problemas con los ficheros.\n" );
    }
    
    printf("Escriba el nombre de la pel%ccula\n", 161);
    scanf(" %[^\n]", nombre);
    printf("Escriba el genero de la pel%ccula\n", 161);
    scanf(" %[^\n]", genero);
    printf("Escriba el numero de copias de la pel%ccula\n", 161);
    scanf(" %[^\n]", num_copias);
    
    strcat(nombre,"\t");
    strcat(genero,"\t");
    
    fprintf(peliculas,nombre);
    fprintf(peliculas,genero);
    fprintf(peliculas,num_copias);
    fprintf(peliculas,"\n");
    
    if (fclose(peliculas)!=0)
       printf("Problemas al cerrar el fichero bd.txt\n");
    else
       fclose(peliculas);
}
saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #3 (permalink)  
Antiguo 24/05/2006, 09:16
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 6 meses
Puntos: 52
Solo tenias que poner un salto de linea y ya.
Saludos
  #4 (permalink)  
Antiguo 24/05/2006, 14:57
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Que se supone que haces con esto:

scanf(" %[^\n]", genero);

scanf tienen como limites de lectura , un espacio, un tabulador, fin de linea o fin de archivo, por tanto supongo que bastaria con:

scanf("%s\n", genero);
pero no me creas , la verdad no tengo mucha experiencia con stdio.h

Saludos.
  #5 (permalink)  
Antiguo 24/05/2006, 21:16
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 6 meses
Puntos: 52
En teoria fscanf te lee hasta encontrar un espacio y como espacio me refiero a tabuladores, saltos de linea, espacios, y creo que ya.

Eso es en teoria, no estoy seguro, por eso para cosas raras utilizaria fgets para trabajar linea por linea y fread para trabajar a bajo nivel.

Saludos
  #6 (permalink)  
Antiguo 27/05/2006, 10:31
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 21 años, 6 meses
Puntos: 16
con eso el scanf lee hasta que encuentra un salto de linea... osea manteniendo los espacios y todo eso
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #7 (permalink)  
Antiguo 27/05/2006, 15:43
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Bueno, pero........

Cita:
Iniciado por El_Metallick
con eso el scanf lee hasta que encuentra un salto de linea... osea manteniendo los espacios y todo eso

Tu intencion es buena, y si te funciona, que bien.
Pero la verdad yo no usaria este metodo para la lectura de filas completas.
Para eso esta la funcion gets, es mucho mas eficiente por que no hace comparaciones como fcans.

Prueba tu codigo con forme lo haz escrito, pero asegurate de que hace realmente lo que quieres, sin causar algun tipo de error en lecturas posteriores.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:14.