Curso de Programación en C/Prog116
< Curso de Programación en C
								Ir a la navegación
				Ir a la búsqueda
				Revisión del 17:42 27 sep 2012 de Rrc (discusión | contribuciones)
Prog116
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define TAMANOAR 1000
 5 
 6 int main( void )
 7 {
 8   double Numeros[TAMANOAR],
 9          Valor;
10 
11   const char * Archivo = "Numeros.dat";
12 
13   int i;
14 
15   long pos;
16 
17   FILE *ioArchivo;
18 
19   // Crear un grupo de valores de dobles
20   for( i = 0; i < TAMANOAR; i++ )
21     Numeros[i] = 100.0 * i + 1.0 / (i + 1);
22 
23   if( ( ioArchivo = fopen( Archivo, "wb" ) ) == NULL )
24   {
25     fprintf( stderr, "No puedo abrir el archivo de salida: %s.\n", Archivo );
26     exit(1);
27   }
28   // write array in binary format to Archivo
29   fwrite( Numeros, sizeof (double), TAMANOAR, ioArchivo );
30   fclose( ioArchivo );
31 
32   if( ( ioArchivo = fopen( Archivo, "rb" ) ) == NULL )
33   {
34     fprintf( stderr, "No puedo abrir %s para acceso random.\n", Archivo );
35     exit( 1 );
36   }
37   // read selected items from Archivo
38   printf( "Ingresa un index en el rango 0-%d: ", TAMANOAR - 1 );
39   scanf( "%d", &i );
40   while( i >= 0 && i < TAMANOAR )
41   {
42     pos = (long)i * sizeof( double ); // calcular el offset
43     fseek( ioArchivo, pos, SEEK_SET );
44     fread( &Valor, sizeof( double ), 1, ioArchivo );
45     printf( "El Valor allá es %f.\n", Valor );
46     printf( "Siguiente index (a fuera del rango para terminar): ");
47     scanf( "%d", &i );
48   }
49   fclose( ioArchivo );
50   puts( "\n¡Adios!\n" );
51   return 0;
52 }
Resultado
[rrc@llawyr CClase]$ gcc -Wall -o Prog116 Prog116.c [rrc@llawyr CClase]$ ./Prog116 Ingresa un index en el rango 0-999: 40 El Valor allá es 4000.024390. Siguiente index (a fuera del rango para terminar): 21 El Valor allá es 2100.045455. Siguiente index (a fuera del rango para terminar): 66 El Valor allá es 6600.014925. Siguiente index (a fuera del rango para terminar): 99 El Valor allá es 9900.010000. Siguiente index (a fuera del rango para terminar): 345 El Valor allá es 34500.002890. Siguiente index (a fuera del rango para terminar): 999 El Valor allá es 99900.001000. Siguiente index (a fuera del rango para terminar): 2345 ¡Adios! [rrc@llawyr CClase]$