Código C++:
Ver original#include <stdio.h>
#include <string.h>
void carga(FILE *parchivo);
void mostrar(FILE *parchivo);
//Código ASCII
#define S 83
#define s 115
// Las estructuras definilas afuera del main o de cualqueir funcion, asi son visibles por todos ************************
// AGREGO UN TYPEDEF PARA NO TENER QUE USAR LA PALABRA STRUCT TODO EL TIEMPO. APARTIR DE AHORA ES UN TIPO MAS COMO TODOS.
typedef struct __listaPrecios{
int cod;
char prod[50];
float precio;
} listaPrecios;
int main(){
FILE *parchivo;
parchivo
=fopen("archivo.txt", "ab+"); // ERROR: Estabas abriendo mal el archivo....faltaba el modo binario. listaPrecios t;
int i, buscar=0, op, altas, otroIngreso[2];
printf("2 - Modificaciones\n"); printf("4 - Mostrar Lista \n");
switch(op){
case 1: // NO SE NECESITABAN LAS LLAVES NI EL IF
carga(parchivo);
break;
case 2:
//mostrar(parchivo);
printf("****************************************** *****\n"); printf("Ingrese el codigo del archivo que desea buscar\n"); i
= fseek(parchivo
,(buscar
-1) * sizeof(listaPrecios
), SEEK_SET
); fread(&t
,sizeof(listaPrecios
),1,parchivo
); printf("%d: %d %s %f\n", i
, t.
cod , t.
prod , t.
precio); break;
case 3:
break;
case 4:
//mostrar(parchivo);
break;
case 5:
//close();
break;
}
}
//-----------------------------------------------------------------
//Funcion de ALTA
void carga(FILE *parchivo)
{
int i;
listaPrecios l;
char sig;
do{
for(i=0;i<1;i++){
printf("Ingrese el producto:"); scanf("%f", &(l.
precio)); // ERROR FATAL!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// ESTABAS ESCRIBIENDO TEXTO Y NO EN BINARIO ASI QUE NUNCA IBAS A PODER LEER
fseek ( parchivo
, 0 , SEEK_END
); // ME POSICIONO AL FINAL DEL ARCHIVO fwrite(&l
, sizeof(listaPrecios
) , 1 , parchivo
); }
printf(" ¿Desea Agregar otro producto? Ingrese la letra: S, de lo contrario ingrese: N\n"); }while(sig == 'S' || sig == 's');
}
/*
//Funcion de Mostrar contenido del fichero
void mostrar(FILE *parchivo)
{
struct listaPrecios vec[1];
printf("El contenido del archivo es: \n");
//Recorro el archivo
do{
fgets(vec, 100, parchivo);
puts(vec);
}while(fgetc(parchivo) != EOF);
}
*/
//------------------------------------------------------
Perdon por lo que voy a decir, pero estaba todo pesimamente hecho. Por un lado imprimes como si fuese texto plano y por otro lado querias leer como si fuesse binario... ahi lo corregi para que quede tipo binario y a mi me funciono. Solo una aclaracion, el modificar quedo hecho un buscar por asi decirlo. Te pide el numero de registro y lo muestra nada mas...pero anda.
Te falta mucho por aprender....yo leeria un poco mas y haria cosas mas faciles para empezar...como manejar el tema de punteros y memoria. Eso te va a aclarar mucho como se manejan los achivos en C++..
Saludos,
PD: Agregue indexado al codigo y un para de comentarios como para que aprendas un par de cosas. Como por ejemplo donde declarar las estructuras y el uso del typedef.