De acuerdo a lo que dices, he corregido errores potenciales del codigo, aunque no estoy conforme porque no se ajusta a especificaciones estandar.
No lo he probado pero creo que esta bien, sin embargo observa las correcciones que hice.
#include <conio.h>
#include <stdio.h>
#define TAM 3
typedef struct
{
int tipo;
float produccion;
float valor;
}t_parcela;
void ver_archivo(FILE*);
void cargar_matriz(t_parcela*[][TAM]);
void main()
{
int i,j;
FILE*pf;
t_parcela parcela[TAM][TAM];
cargar_matriz(parcela);
pf
=fopen("campo.dat","w+b"); {
for(i=0;i<TAM;i++)
for(j=0;j<TAM;j++)
{
if(parcela[i][j].produccion!=0 && parcela[i][j].tipo!=99)
{
fseek(pf
,((i
*TAM
)+j
)*sizeof(t_parcela
),SEEK_SET
); fwrite(&parcela
[i
][j
],sizeof(parcela
),1,pf
); }
}
}
ver_archivo(pf);
}
void cargar_matriz(t_parcela p[TAM][TAM])
{
int i,j;
for(i=0;i<TAM;i++)
for(j=0;j<TAM;j++)
{
puts("Escriba el tipo de grano(entero de 1 a 5)"); scanf("%d",&p
[i
][j
].
tipo); puts("Escriba la produccion obtenida"); scanf("%f",&p
[i
][j
].
produccion); puts("Escriba el valor de la produccion"); scanf("%f",&p
[i
][j
].
valor); }
}
void ver_archivo(FILE*pf)
{
t_parcela parcela;
pf
=fopen("campo.dat","rb"); fread(&parcela
,sizeof(t_parcela
),1,pf
); {
printf("%f",parcela.
produccion); fread(&parcela
,sizeof(t_parcela
),1,pf
); }
}
Antes te sugiero que modifiques las salidas de los printf() agregando espacios como saltos de lineas para que puedas leer mejor los resultados.
Saludos