Curso de Programación en C/Prog115

De WikiCabal
Ir a la navegación Ir a la búsqueda

Prog115

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 #define BUFTAMANO 1024
 6 #define STROZO 81
 7 
 8 void append( FILE *Fuente, FILE *dest );
 9 
10 int main( void )
11 {
12   FILE *ADest,
13        *AFuente;
14 
15   int  Archivos = 0;
16 
17   char ArchivoDestino[STROZO],  // Nombre de archivo de fuente
18        ArchivoFuente[STROZO];  // Nombre de archivo de destino
19 
20   printf( "Ingresa el nombre del archivo de destino: " );
21   fgets( ArchivoDestino, STROZO - 2, stdin );
22 
23   if( *(ArchivoDestino + strlen( ArchivoDestino ) -1 ) != '\n' )
24   {
25     printf( "El nombre que entraste es demasiado largo.\n"
26             "Solo %d chars MAX\n", STROZO - 2 );
27     exit(1);
28   }
29   else
30     *(ArchivoDestino + strlen( ArchivoDestino ) -1 ) = '\0'; 
31 
32   if( ( ADest = fopen( ArchivoDestino, "a" ) ) == NULL )
33   {
34     fprintf( stderr, "No puedo abrir %s\n", ArchivoDestino );
35     exit( 2 );
36   }
37 
38   if( setvbuf( ADest, NULL, _IOFBF, BUFTAMANO ) != 0 )
39   {
40     fputs( "No puedo crear el buffer de salida\n", stderr );
41     exit( 3 );
42   }
43 
44   puts( "Ingresa el nombre del primer archivo de fuente (Línea vacio para terminar):" );
45   while( fgets( ArchivoFuente, STROZO - 2, stdin ) && ArchivoFuente[0] != '\n' )
46   {
47     if( *(ArchivoFuente + strlen( ArchivoFuente ) -1 ) != '\n' )
48     {
49       printf( "El nombre que entraste es demasiado largo.\n"
50               "Solo %d chars MAX\n", STROZO - 2 );
51       exit(1);
52     }
53     else
54       *(ArchivoFuente + strlen( ArchivoFuente ) -1 ) = '\0'; 
55 
56     if( strcmp( ArchivoFuente, ArchivoDestino ) == 0 )
57       fputs( "No puedo usar el mismo archivo por fuente y destino\n", stderr );
58     else if( ( AFuente = fopen( ArchivoFuente, "r" ) ) == NULL )
59       fprintf( stderr, "No puedo abrir %s\n", ArchivoFuente );
60     else
61     {
62       if( setvbuf( AFuente, NULL, _IOFBF, BUFTAMANO ) != 0 )
63       {
64         fputs( "No puedo crear el buffer de ingreso\n", stderr );
65         continue;
66       }
67       append( AFuente, ADest );
68       if( ferror( AFuente ) != 0 )
69         fprintf( stderr, "Error en leer el archivo %s.\n", ArchivoFuente );
70       if( ferror( ADest ) != 0 )
71         fprintf( stderr, "Error in escribir el archivo file %s.\n", ArchivoDestino );
72       fclose( AFuente );
73       Archivos++;
74       printf( "Archivo %s agregado.\n", ArchivoFuente );
75       puts( "Siguiente archivo (Línea vacio para terminar):" );
76     }
77   }
78   printf( "Listo. %d archivos agregados.\n", Archivos );
79   fclose( ADest );
80 
81   return 0;
82 }
83 
84 void append( FILE *Fuente, FILE *dest )
85 {
86   size_t bytes;
87   static char temp[BUFTAMANO]; // allocate once
88   while( ( bytes = fread( temp, sizeof( char ), BUFTAMANO, Fuente ) ) > 0 )
89     fwrite( temp, sizeof (char), bytes, dest );
90 }

Resultado

[rrc@llawyr CClase]$ gcc -Wall -o Prog115 Prog115.c
[rrc@llawyr CClase]$ ./Prog115
Ingresa el nombre del archivo de destino: Dest
Ingresa el nombre del primer archivo de fuente (Línea vacio a terminar):
Prog1.c
Archivo Prog1.c agregado.
Siguiente archivo (Línea vacio para terminar):
Prog2.c
Archivo Prog2.c agregado.
Siguiente archivo (Línea vacio para terminar):
Prog3.c
Archivo Prog3.c agregado.
Siguiente archivo (Línea vacio para terminar):

Listo. 3 archivos agregados.
[rrc@llawyr CClase]$ cat Dest
/*  Prog4.c -- Asignación de resultados aritméticos */
#include <stdio.h>
     
int main( void )
{
  int n  = 5,
      n2 = n * n,
      n3 = n2 * n; /* decleración y asignación de resultado de multiplicación */

  printf( "n = %d, n cuadrado = %d, n cubo = %d\n", n, n2, n3 );
  return 0;
}
/* Prog5.c  -- floats y scanf()                 */

#include <stdio.h>

int main(void)
{
    float peso; 

    printf("¿Vale usted su peso en rhodium?\n");
    printf("Vamos a ver.\n");
    printf("Ingrese su peso en libras: ");

/* Obtener peso del usuario                         */
    scanf("%f", &peso);

/* Si rhodium vale $770 el once                     */
/* 14.5833 para convertir pounds avd. a ounces troy */

    printf("Su peso en rhodium vale $%.2f.\n", (770.0 * peso * 14.5833) );
    printf("Si el valor de rhodium baja,\n");
    printf("come más a mantener su valor.\n");

    return 0;
}


// Prog1.c
#include <stdio.h>

int main(void)               /* Un programa simple               */
{
   int num;                  /* definir una variable llamada num */
   num = 1;                  /* asignar una valor a num          */

   printf("Soy una computadora "); /* use the printf() function  */
   printf("simple.\n");
   printf("Mi número favorito es %d porque el es el primer.\n", num);
   return 0;
}

/* Prog2.c */

#include <stdio.h>

int main (void)
{
  int fathoms = 2,
      feet    = 6 * fathoms;

  printf("Son %d pies en %d fathoms!\n", feet, fathoms);
  return 0;
}

// Prog3.c
#include <stdio.h>

void macero( void );  /* Prototipo de la función macero() */
      
int main(void)
{ 
   printf( "Voy a convocar el macero.\n" );
   macero();
   printf( "Si. Me traen algunos DVDs grabables y té.\n" );
   return 0;
}

void macero(void)            /* Definición de la función macero() */
{
   printf( "Me llamaste, señor?\n" );
} 
[rrc@llawyr CClase]$ 

Explicación