Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


Un Problema - Lectura / Escritura De Archivos

Preguntas y respuestas sobre el lenguaje de programacion C/C++

Un Problema - Lectura / Escritura De Archivos

Notapor MatiasC el Mié Dic 26, 2007 1:45 am

Hola a todos. He echo el siguiente programa:

Código: Seleccionar todo
#include <stdio.h>

void menu()
{
       
    printf ("\n:: TinyBlock v1.1 ::\n ");
    printf ("\n[1] Abrir Archivo\n[2] Crear Archivo\n[3] Creditos\n[4] Salir\n ");
    fflush( stdout );
}

void otroarchivo()
{
   int seleccion;
   printf("\nDeseas:\n[1] Abrir un archivo\n[2] Crear un archivo\n[3]Salir\n");
       scanf("%i", &seleccion);
   {
      int ch2;
     
      while ((ch2 = getchar()) != EOF && ch2 != '\n')
        ;
   }
   
   if (seleccion == 1)
      abrir_archivo();
   else if (seleccion == 2)
      crear_archivo();
   else if (seleccion == 3)
      return 0;
  }

void abrir_archivo()
{
    FILE *fichero;
    char archivo1[50];
    char letra;
    printf ("Fichero a abrir:");
    gets (archivo1);
    fichero = fopen(archivo1,"r");
    if (fichero==NULL)
       {
       printf( "No se puede abrir el fichero.\n" );
       exit( 1 );
       }
    printf( "Contenido del fichero:\n" );
    letra=getc(fichero);
    while (feof(fichero)==0)
          {
          printf( "%c",letra );
          letra=getc(fichero);
          }
    if (fclose(fichero)!=0)
       printf( "Problemas al cerrar el fichero\n" );
       otroarchivo();     
    }
   
void crear_archivo()
{
   char texto[10000];
    char archivo2[50];
    printf ("Nombre del archivo a guardar: ");
    gets(archivo2);
    printf ("\nComienza a escribir! (Teclea *EOF* para guardar y salir): \n \n");
    freopen( archivo2,"w",stdout );
    gets(texto);
    do {
       printf( "%s\n",texto );
       gets(texto);
       } while ( strcmp(texto, "*EOF*") != 0 );
    fprintf( stderr, "Guardado correctamente en: \"%s\" \n \n", archivo2 );
    otroarchivo();
}


int main(void)
{
   
   int opcion;
   principio:
   menu();
   
   scanf("%i", &opcion);
   {
      int ch1;
     
      while ((ch1 = getchar()) != EOF && ch1 != '\n')
        ;
   }
   
   switch( opcion )
   {
      case 1:
      abrir_archivo();
      break;
      case 2:
      crear_archivo();
      break;
      case 3:
        printf ("_____________________________________________________\n");
      printf ("\nBy Kerberos. GNU/GPL Software.\n");
      goto principio;
      break;
      case 4:
      return 0;
      break;
      default:
    printf ("_____________________________________________________\n");
      printf ("\nSeleccion no disponible.\n");
      goto principio;
     
}
}


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

:: 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:


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:


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.
MatiasC
Novato
Novato
 
Mensajes: 1
Registrado: Mié Dic 26, 2007 1:43 am

Re: Un Problema - Lectura / Escritura De Archivos

Notapor ivancp el Lun Ene 07, 2008 4:51 pm

Estimado,

No es muy recomandable utilizar sentencias goto (conocido como programacion de spaghetti) Te sugiero mejorar tu menu de la siguiente forma:

Código: Seleccionar todo
bool bSalir = false;
char key ;

while(!bSalir)
{
    Menu();
    key = getchar();
    switch(key)
    {
        case '1':
         Accion1();
         break;
        case '2':
         Accion2();
         break;
        case '3':
         Accion3();
         break;
        case 'S': case 's':// Salir
         bSalir = true;
         break;
    }
}
ivancp
Programador Experimentado
Programador Experimentado
 
Mensajes: 301
Registrado: Jue Sep 06, 2007 12:57 pm


Volver a C/C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados