• Martes 12 de Noviembre de 2024, 20:30

Autor Tema:  Un Problema - Lectura / Escritura De Archivos  (Leído 684 veces)

MatiasC

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Un Problema - Lectura / Escritura De Archivos
« en: Miércoles 26 de Diciembre de 2007, 07:42 »
0
Hola a todos. He echo el siguiente programa:

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. void menu()
  5. {
  6.        
  7.     printf ("\n:: TinyBlock v1.1 ::\n ");
  8.     printf ("\n[1] Abrir Archivo\n[2] Crear Archivo\n[3] Creditos\n[4] Salir\n ");
  9.     fflush( stdout );
  10. }
  11.  
  12. void otroarchivo()
  13. {
  14.    int seleccion;
  15.    printf("\nDeseas:\n[1] Abrir un archivo\n[2] Crear un archivo\n[3]Salir\n");
  16.        scanf("%i", &seleccion);
  17.    {
  18.       int ch2;
  19.      
  20.       while ((ch2 = getchar()) != EOF && ch2 != '\n')
  21.         &#59;
  22.    }
  23.    
  24.    if (seleccion == 1)
  25.       abrir_archivo();
  26.    else if (seleccion == 2)
  27.       crear_archivo();
  28.    else if (seleccion == 3)
  29.       return 0;
  30.   }
  31.  
  32. void abrir_archivo()
  33.  {
  34.     FILE *fichero;
  35.     char archivo1[50];
  36.     char letra;
  37.     printf ("Fichero a abrir:");
  38.     gets (archivo1);
  39.     fichero = fopen(archivo1,"r");
  40.     if (fichero==NULL)
  41.        {
  42.        printf( "No se puede abrir el fichero.\n" );
  43.        exit( 1 );
  44.        }
  45.     printf( "Contenido del fichero:\n" );
  46.     letra=getc(fichero);
  47.     while (feof(fichero)==0)
  48.           {
  49.           printf( "%c",letra );
  50.           letra=getc(fichero);
  51.           }
  52.     if (fclose(fichero)!=0)
  53.        printf( "Problemas al cerrar el fichero\n" );
  54.        otroarchivo();    
  55.     }
  56.    
  57. void crear_archivo()
  58. {
  59.    char texto[10000];
  60.     char archivo2[50];
  61.     printf ("Nombre del archivo a guardar: ");
  62.     gets(archivo2);
  63.     printf ("\nComienza a escribir! (Teclea *EOF* para guardar y salir): \n \n");
  64.     freopen( archivo2,"w",stdout );
  65.     gets(texto);
  66.     do {
  67.        printf( "%s\n",texto );
  68.        gets(texto);
  69.        } while ( strcmp(texto, "*EOF*") != 0 );
  70.     fprintf( stderr, "Guardado correctamente en: \"%s\" \n \n", archivo2 );
  71.     otroarchivo();
  72. }
  73.  
  74.  
  75. int main(void)
  76. {
  77.    
  78.    int opcion;
  79.    principio:
  80.    menu();
  81.    
  82.    scanf("%i", &opcion);
  83.    {
  84.       int ch1;
  85.      
  86.       while ((ch1 = getchar()) != EOF && ch1 != '\n')
  87.         &#59;
  88.    }
  89.    
  90.    switch( opcion )
  91.    {
  92.       case 1:
  93.       abrir_archivo();
  94.       break;
  95.       case 2:
  96.       crear_archivo();
  97.       break;
  98.       case 3:
  99.         printf ("_____________________________________________________\n");
  100.       printf ("\nBy Kerberos. GNU/GPL Software.\n");
  101.       goto principio;
  102.       break;
  103.       case 4:
  104.       return 0;
  105.       break;
  106.       default:
  107.     printf ("_____________________________________________________\n");
  108.       printf ("\nSeleccion no disponible.\n");
  109.       goto principio;
  110.      
  111. }
  112. }
  113.  
  114.  

Bien, si ahora, por ejemplo seleccionamos Abrir archivo me sale:

Citar
:: TinyBlock v1.1 ::

[1] Abrir Archivo
[2] Crear Archivo
[3] Creditos
[4] Salir
1
Fichero a abrir:lala.txt
Contenido del fichero:
lalac

Deseas:
[1] Abrir un archivo
[2] Crear un archivo
[3]Salir

Hasta ahi bien, pero, en cambio si selecciono Crear archivo sale:

Citar

Nombre del archivo a guardar: hola.txt

Comienza a escribir! (Teclea *EOF* para guardar y salir):

hola
*EOF*
Guardado correctamente en: "hola.txt"


Cuando debajo de "Guardado correctamente en: "hola.txt"" debería haber salido:

Citar

Deseas:
[1] Abrir un archivo
[2] Crear un archivo
[3]Salir

Utilizo Ubuntu Linux con GCC como compilador.

Por que ocurre eso? Alguien sabe como solucionarlo? Muchas gracias.