Curso de Programación en C/Prog115
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]$