Pessoal preciso de ajuda, o programa esta a gravar lixo ou seja qdo introduzo o 1º valor = 1 e 2º valor = 1, o resultado final deveria ser 2,3 e 3. fechando o programa e voltando a executar o programa escolhendo a segunda opçao mostrar dados anteriores ele estoira ou seja estoira na função void le_valores(struct struct_empresa *p)
Código
#include <stdio.h>
#include <Windows.h>
#include <conio.h>
struct struct_empresa;
struct struct_empresa{
float liq_geral;
float liq_reduzida;
float liq_imediata;
}dados[3];
void liquidez(void);
void le_valores(struct struct_empresa *);
void guardar_valores(struct struct_empresa);
void main(void){
struct struct_empresa x;
int opcao;
printf("(prima 1) para calcular a liquidez\n");
printf("(prima 2)mostrar dados anteriores\n\n");
do{
printf("(Escolha a opcao) ");
opcao=getch();
switch (opcao){
case '1':
system("cls");
liquidez();
break;
case'2':
system("cls");
struct struct_empresa *data;
le_valores(data);
printf("liquidez geral %d\n liq_reduzida: %d\n liq_imediata: %d\n",data->liq_geral, data->liq_reduzida, data->liq_imediata);
break;
default:
printf( "Op%c%co inv%clida!!! ",135,132,160);getch();
printf( " ");
break;
}
} while (opcao!='27');
}
void liquidez(){
float prim;
float seg;
float liq_g;
float liq_r;
float liq_i;
struct_empresa liquid;
printf("introduza o primeiro numero: \n");
scanf("%.2f",&prim);
fflush(stdin);
printf("introduza o segundo numero: \n");
scanf("%.2f",&seg);
//liquidez geral
liq_g=prim+seg;
liquid.liq_geral=liq_g;
printf("liquidez geral: %.2f\n",liquid.liq_geral);
//liquidez reduzida
liq_r=(prim*2)+seg;
liquid.liq_reduzida=liq_r;
printf("liquidez reduzida: %.2f\n",liquid.liq_reduzida);
//liquidez imediata
liq_i=prim+(seg*2);
liquid.liq_imediata=liq_i;
printf("liquidez imediata: %.2f\n",liquid.liq_imediata);
guardar_valores(liquid);
}
void guardar_valores(struct struct_empresa liquid){
FILE *Liq;
Liq=fopen("experiencia.dat","wb");
if (!Liq)
{
printf("Erro a guardar ....!!");
}
fwrite(&liquid,sizeof(struct struct_empresa),1,Liq);
fclose(Liq);
}
void le_valores(struct struct_empresa *p){
FILE *Liq;
if((Liq=fopen("experiencia.dat","rb"))==NULL)
printf("Erro\n");
fread((struct struct_empresa*)p,sizeof(struct struct_empresa),1,Liq);
//printf("liquidez geral %d\n liq_reduzida: %d\n liq_imediata: %d\n",p->liq_geral, p->liq_reduzida, p->liq_imediata);
fclose(Liq);
}
Código
#include <stdio.h>
#include <Windows.h>
#include <conio.h>
struct struct_empresa;
struct struct_empresa{
float liq_geral;
float liq_reduzida;
float liq_imediata;
}dados[3];
void liquidez(void);
void le_valores(struct struct_empresa *);
void guardar_valores(struct struct_empresa);
void main(void){
struct struct_empresa x;
int opcao;
printf("(prima 1) para calcular a liquidez\n");
printf("(prima 2)mostrar dados anteriores\n\n");
do{
printf("(Escolha a opcao) ");
opcao=getch();
switch (opcao){
case '1':
system("cls");
liquidez();
break;
case'2':
system("cls");
struct struct_empresa *data;
le_valores(data);
printf("liquidez geral %d\n liq_reduzida: %d\n liq_imediata: %d\n",data->liq_geral, data->liq_reduzida, data->liq_imediata);
break;
default:
printf( "Op%c%co inv%clida!!! ",135,132,160);getch();
printf( " ");
break;
}
} while (opcao!='27');
}
void liquidez(){
float prim;
float seg;
float liq_g;
float liq_r;
float liq_i;
struct_empresa liquid;
printf("introduza o primeiro numero: \n");
scanf("%.2f",&prim);
fflush(stdin);
printf("introduza o segundo numero: \n");
scanf("%.2f",&seg);
//liquidez geral
liq_g=prim+seg;
liquid.liq_geral=liq_g;
printf("liquidez geral: %.2f\n",liquid.liq_geral);
//liquidez reduzida
liq_r=(prim*2)+seg;
liquid.liq_reduzida=liq_r;
printf("liquidez reduzida: %.2f\n",liquid.liq_reduzida);
//liquidez imediata
liq_i=prim+(seg*2);
liquid.liq_imediata=liq_i;
printf("liquidez imediata: %.2f\n",liquid.liq_imediata);
guardar_valores(liquid);
}
void guardar_valores(struct struct_empresa liquid){
FILE *Liq;
Liq=fopen("experiencia.dat","wb");
if (!Liq)
{
printf("Erro a guardar ....!!");
}
fwrite(&liquid,sizeof(struct struct_empresa),1,Liq);
fclose(Liq);
}
void le_valores(struct struct_empresa *p){
FILE *Liq;
if((Liq=fopen("experiencia.dat","rb"))==NULL)
printf("Erro\n");
fread((struct struct_empresa*)p,sizeof(struct struct_empresa),1,Liq);
//printf("liquidez geral %d\n liq_reduzida: %d\n liq_imediata: %d\n",p->liq_geral, p->liq_reduzida, p->liq_imediata);
fclose(Liq);
}