Até agora de pouco eu estava conseguindo cadastrar tudo, fazer alterações tudo certinho. Derrepente sem eu nem mecher no código(o que até parece estranho para voce que esta lendo), meu programa começou a fazer atualizaçoes todas incorretas.
Primeiro ele funcionava direitinho, depois de alguns minutos ele começou a dar pau sem mecher no código.. Sera que isto é problema com sujeira no buffer ou algo do tipo ?
Se puderem me ajudar, é só copiar e colocar este programa no C++ que ele funciona certinho, só não sei se ele vai dar o mesmo problema que aqui em casa !
Pergunta
juninholiveira90
Meu programa abaixo esta com o seguinte problema
Até agora de pouco eu estava conseguindo cadastrar tudo, fazer alterações tudo certinho. Derrepente sem eu nem mecher no código(o que até parece estranho para voce que esta lendo), meu programa começou a fazer atualizaçoes todas incorretas.
Primeiro ele funcionava direitinho, depois de alguns minutos ele começou a dar pau sem mecher no código.. Sera que isto é problema com sujeira no buffer ou algo do tipo ?
Se puderem me ajudar, é só copiar e colocar este programa no C++ que ele funciona certinho, só não sei se ele vai dar o mesmo problema que aqui em casa !
Obrigado
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct cliente{
int codigocliente,numerocliente;
char nomecliente[100],enderecocliente[100],exccliente;
};// fim da struct cliente
struct bolo{
float precobolo;
int codigobolo, quantidadebolo;
char nomebolo[100],excbolo;
};//Fim da struct bolo
struct pedido{
int codigopedido,pcodigocliente,pcodigobolo,pquantidadebolo;
float valortotalpedido;
char pnomecliente, pnomebolo,excpedido;
};//fim da struct pedido
FILE *cliente1;
FILE *bolo1;
FILE *pedido1;
//função para verificar se o cod cliente já existe
struct cliente verificaCliente(int cod){
int achou_reg = 0;
cliente procura;
fseek (cliente1, 0, SEEK_SET);
while (! feof (cliente1) && (!achou_reg) ){
fread (&procura, sizeof(struct cliente), 1, cliente1);
if((procura.codigocliente == cod) && (procura.exccliente != '*'))
achou_reg = 1;
}
return procura;
}// fim da função verificaCliente
//função para verificar se o codbolo já existe
struct bolo verificaBolo(int cod){
int achou_reg = 0;
bolo procura;
fseek (bolo1, 0, SEEK_SET);
while (! feof (bolo1) && (!achou_reg) ){
fread (&procura, sizeof(struct bolo), 1, bolo1);
if((procura.codigobolo == cod) && (procura.excbolo != '*'))
achou_reg = 1;
}
return procura;
}// fim da função verificaBliente
struct pedido verificaPedido(int cod){
int achou_reg = 0;
pedido procura;
fseek (pedido1, 0, SEEK_SET);
while (! feof (pedido1) && (!achou_reg) ){
fread (&procura, sizeof(struct pedido), 1, pedido1);
if((procura.codigopedido == cod) && (procura.excpedido != '*'))
achou_reg = 1;
}
return procura;
}// fim da função verificaPedido
int main()
{
//declaração das variáveis
int opcao,codigocliente,codigobolo,codigopedido;
//criando o arquivo caso não tenha, e se tiver ele abre o arquivo para depois efetuar pesquisas
if((cliente1 = fopen("d:cliente.dat","r+")) == NULL)
cliente1 = fopen("d:cliente.dat","w+");
if((bolo1 = fopen("d:bolo.dat","r+")) == NULL)
bolo1 = fopen("d:bolo.dat","w+");
if((pedido1 = fopen("d:pedido.dat","r+")) == NULL)
pedido1 = fopen("d:pedido.dat","w+");
//criando as referencias
cliente c;
bolo b;
pedido p;
printf("\n 1 - Cadastrar cliente\n 2 - Cadastrar Bolo\n 3 - Cadastrar Pedido \n 6 - Cliente Cadastrado\n 7 - Bolo Cadastrado \n 8 - Pedidos Cadastrados\n");
fflush(stdin);
scanf("%i",&opcao);
while(opcao != 0){
switch (opcao){
case 1: {
//colocando o apontador no fim do arquivo
fseek(cliente1,0,SEEK_END);
printf("\nDigite o codigo do cliente\n");
fflush(stdin);
scanf("%i",&codigocliente);
while(codigocliente < 0){
printf("\nCodigo não pode ser menor que 0\n Digite novamente: ");
fflush(stdin);
scanf("%i",&codigocliente);
}//Fim do codigocliente < 0
//verifica se o código do cliente já existe
c = verificaCliente(c.codigocliente);
while(codigocliente > 0){
fflush(stdin);
c = verificaCliente(codigocliente); // funcao
if(c.codigocliente == codigocliente){
printf("Codigo já cadastrado!\n");
printf("Codigo do Cliente: ");
fflush(stdin);
scanf("%i",&codigocliente);
}//fim do if
else{
c.codigocliente = codigocliente;
break;
}//fim do else
}//fim do while
printf("\nDigite o nome \n");
fflush(stdin);
gets(c.nomecliente);
printf("\nDigite o endereco \n");
fflush(stdin);
gets(c.enderecocliente);
printf("\nDigite o numero \n");
fflush(stdin);
scanf("%i",&c.numerocliente);
fseek(cliente1,0,SEEK_END);
fwrite(&c,sizeof(struct cliente),1,cliente1);
break;
}//Fim do case 1
case 2:{
fseek(bolo1,0,SEEK_END);
printf("\nDigite o codigo do bolo \n");
fflush(stdin);
scanf("%i",&codigobolo);
while(codigobolo < 0){
printf("\nCodigo não pode ser menor que 0\nDigite novamente: ");
fflush(stdin);
scanf("%i",&codigobolo);
}//Fim do codigocliente < 0
//chamando a função
b = verificaBolo(codigobolo);
while(codigobolo > 0){
fflush(stdin);
b = verificaBolo(codigobolo); // funcao
if(b.codigobolo == codigobolo){
printf("Codigo já cadastrado!\n");
printf("Codigo do Bolo: ");
fflush(stdin);
scanf("%i",&codigobolo);
}//fim do if
else{
b.codigobolo = codigobolo;
break;
}//fim do else
}//fim do while
printf("\nDigite o nome \n");
fflush(stdin);
gets(b.nomebolo);
printf("\nDigite a quantidade\n");
fflush(stdin);
scanf("%i",&b.quantidadebolo);
while(b.quantidadebolo < 0){
printf("Quantidade invalida\n Digite novamente");
fflush(stdin);
scanf("%i",&b.quantidadebolo);
}//fim while quantidade bolo < 0
printf("\nDigite o preço\n");
fflush(stdin);
scanf("%f",&b.precobolo);
while(b.precobolo < 0){
printf("Valor invalido\n Digite novamente");
fflush(stdin);
scanf("%i",&b.precobolo);
}// Fim do while b.precobolo < 0
fseek(bolo1,0,SEEK_END);
fwrite(&b,sizeof(struct bolo),1,bolo1);
break;
}//Fim do case 2
case 3:{
fseek(pedido1,0,SEEK_SET);
printf("\nDigite o codigo do pedido\n");
fflush(stdin);
scanf("%i",&codigopedido);
while(codigopedido < 0){
printf("Codigo invalido\nDigite novamente: ");
fflush(stdin);
scanf("%i",&codigopedido);
}//fim do while codigopedido <0
//chamando a função para verificar se o código do pedido já existe
while(codigopedido > 0){
fflush(stdin);
p = verificaPedido(codigopedido); // funcao
if(p.codigopedido == codigopedido){
printf("Codigo já cadastrado!\n");
printf("Codigo do Bolo: ");
fflush(stdin);
scanf("%i",&codigopedido);
}//fim do if
else{
p.codigopedido = codigopedido;
break;
}//fim do else
}//fim do while
printf("\nCodigo do Cliente: ");
fflush(stdin);
scanf("%i",&codigocliente);
do{
//verificando se o cliente existe
c = verificaCliente(codigocliente);
if(c.codigocliente != codigocliente){
printf("\nCliente não encontrado\n");
fflush(stdin);
scanf("%i",&codigocliente);
}// fim do if
}while(c.codigocliente != codigocliente);
p.pcodigocliente = codigocliente;
printf("\nCodigo do bolo: ");
fflush(stdin);
scanf("%i",&codigobolo);
do{
//verificando se o bolo existe ou não
b = verificaBolo(codigobolo);
if(b.codigobolo != codigobolo){
printf("\nBolo não encontrado: ");
fflush(stdin);
scanf("%i",&codigobolo);
}// fim do if
}while(b.codigobolo != codigobolo);
p.pcodigobolo = codigobolo;
do{
printf("\nA quantidade do estoque %i",b.quantidadebolo);
printf("\nQuantidade :");
fflush(stdin);
scanf("%i",&p.pquantidadebolo);
if( p.pquantidadebolo > b.quantidadebolo)
{printf("\n\aA quantidade invalida!!!"); }
} while(( p.pquantidadebolo > b.quantidadebolo));
// tira a quantiade de bolos vendidos
b.quantidadebolo= b.quantidadebolo - p.pquantidadebolo;
// calcula o preço do bolo
p.valortotalpedido = b.precobolo * p.pquantidadebolo ;
printf("\nPreco Total : %8.2f ",p.valortotalpedido);
//aqui esta com erro !
fseek(bolo1,ftell(bolo1) - sizeof(struct bolo),0);
fwrite(&b,sizeof(struct bolo),1,bolo1);
fseek(pedido1,0,SEEK_END);
fwrite(&p,sizeof(struct pedido),1,pedido1);
fflush(stdin);
getchar();
break;
}//Fim do case 3
case 6:{
system("cls");
fseek(cliente1,0,SEEK_SET);
while(fread(&c,sizeof(struct cliente),1,cliente1) == 1 )
printf("\n Codigo cliente: %i \n Nome cliente: %s \n Endereco cliente: %s \n Numero: %i\n", c.codigocliente,c.nomecliente,c.enderecocliente,c.numerocliente );
fflush(stdin);
getchar();
break;
}//Fim do case 6
case 7:{
system("cls");
fseek(bolo1,0,SEEK_SET);
while( fread (&b,sizeof(struct bolo),1,bolo1) == 1 )
printf("\n\nCodigo bolo: %i\nNome : %s\nQuantidade: %i\nPreco: %8.2f\n",b.codigobolo,b.nomebolo,b.quantidadebolo,b.precobolo);
fflush(stdin);
getchar();
break;
}//Fim do case 7
case 8:{
system("cls");
fseek(pedido1,0,SEEK_SET);
while( fread (&p,sizeof(struct pedido),1,pedido1) == 1 )
printf("\nCodigo pedido: %i \nCodigo bolo: %i \nCodigo cliente: %i \nPreco pedido: %8.2f \n",p.codigopedido,p.pcodigobolo,p.pcodigocliente,p.valortotalpedido);
fflush(stdin);
getchar();
break;
}//fim do case 8
}// fim do switch
system("cls");
printf("\n 1 - Cadastrar cliente\n 2 - Cadastrar Bolo\n 3 - Cadastrar Pedido \n 6 - Cliente Cadastrado\n 7 - Bolo Cadastrado \n 8 - Pedidos Cadastrados\n");
fflush(stdin);
scanf("%i",&opcao);
}//fim do while opcao
fclose(cliente1);
fclose(bolo1);
}// Fim da main
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.