fstream seekp
Publicado por Alfil (1444 intervenciones) el 29/12/2018 11:49:58
Estoy tratando de pasar este código de C a C++
El programa abre un archivo de acceso aleatorio y añade registros ordenados por el número de cuenta.
En C funciona perfectamente pero en C++ no consigo hacer funcionar la instrucción fs.seekp adecuadamente y escribe los nuevos datos siempre al final del fichero
Programa en C
Programa en C++
El programa abre un archivo de acceso aleatorio y añade registros ordenados por el número de cuenta.
En C funciona perfectamente pero en C++ no consigo hacer funcionar la instrucción fs.seekp adecuadamente y escribe los nuevos datos siempre al final del fichero
Programa en C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
struct datosCliente {
int numCta;
char apellido[ 15 ];
char nombre[ 10 ];
double saldo;
};
int main()
{
FILE *ptrCf; // apuntador al archivo
// crea datosCliente con información predeterminada
struct datosCliente cliente = { 0, "", "", 0.0 };
if ( ( ptrCf = fopen( "clientes.dat", "rb+" ) ) == NULL ) {
printf( "El archivo no pudo abrirse.\n" );
} else {
printf( "Introduzca el numero de cuenta"
" ( 1 a 100, 0 para terminar la entrada )\n? " );
scanf( "%d", &cliente.numCta );
while ( cliente.numCta != 0 ) {
printf( "Introduzca el apellido, el nombre, el saldo\n? " );
fscanf( stdin, "%s%s%lf", cliente.apellido, cliente.nombre, &cliente.saldo );
// localiza la posición de un registro especifico en el archivo
fseek( ptrCf, ( cliente.numCta - 1 ) * sizeof( struct datosCliente ), SEEK_SET );
// escribe en el archivo
fwrite( &cliente, sizeof( struct datosCliente ), 1, ptrCf );
printf( "Introduzca el numero de cuenta"
" ( 1 a 100, 0 para terminar la entrada )\n? " );
scanf( "%d", &cliente.numCta );
}
fclose( ptrCf ); // fcierra el archivo
}
return 0;
}
Programa en C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <fstream>
#include <iostream>
using namespace std;
struct datosCliente {
int numCta;
char apellido[ 15 ];
char nombre[ 10 ];
double saldo;
};
int main()
{
// crea datosCliente con información predeterminada
struct datosCliente cliente = { 0, "", "", 0.0 };
ofstream fs( "clientes.dat", ios::app | ios::binary);
cout << "Introduzca el numero de cuenta"
<< " ( 1 a 100, 0 para terminar la entrada )\n? ";
cin >> cliente.numCta;
while ( cliente.numCta != 0 ) {
cout << "Introduzca el apellido, el nombre, el saldo\n? ";
cin >> cliente.apellido >> cliente.nombre >> cliente.saldo;
// localiza la posición de un registro especifico en el archivo
fs.seekp( ( cliente.numCta - 1 ) * sizeof( datosCliente ) );
// escribe en el archivo
fs.write( (char*)&cliente, sizeof( struct datosCliente ) );
cout << "Introduzca el numero de cuenta"
<< " ( 1 a 100, 0 para terminar la entrada )\n? ";
cin >> cliente.numCta;
} // fin de while
fs.close();
return 0;
}
Valora esta pregunta
0