Pessoal, sei que gravação de dados fica melhor com arquivos binários, mais como é pra estudo preciso da seguinte ajuda:
Um exemplo de saída para o programa abaixo:
1;20150410;89;2;V;F 2;20150411;78;1;T;C
Todos os dados digitados e gravados são separados por " ; ", ou seja, de forma formatada, agora após a gravação e finalização do programa preciso de uma função que imprima na tela no formato abaixo as informações conforme segue:
CodigoNF =
DT_Emissao =
CodigoCliente =
QtdeItens =
CategoriaNota =
TipoFrete =
Se possível também uma outra função que me diga quantos registros tem no arquivo sendo que cada linha gravada representa 01 registro.
#include <stdio.h>
#include <stdlib.h>
// um contador global para uso na função principal e booleana
int cont = 0;
// a struct citada
struct st_Nota_Fiscal
{
int CodigoNF;
char DT_Emissao[10];
int CodigoCliente;
int QtdeItens;
char CategoriaNota[1];
char TipoFrete[1];
};
// criando a função booleana uma vez que estou trabalhando com c
enum boolean
{
true = 1, false = 0
}; typedef enum boolean Grava_dados;
//a função de gravação com uso do contador global
Grava_Dados (struct st_Nota_Fiscal pv_NotaFiscal[cont])
{
FILE *fp;
fp = fopen ("NF_010015.txt", "a");
if (fp == NULL)
{
return (false);
exit(1);
}
else
{
// usei o fprintf pois melhor se adaptou a gravação com o vetor pv_NotaFiscal.
fprintf(fp,"%d;",pv_NotaFiscal[cont].CodigoNF);
fprintf(fp,"%s;",pv_NotaFiscal[cont].DT_Emissao);
fprintf(fp,"%d;",pv_NotaFiscal[cont].CodigoCliente);
fprintf(fp,"%d;",pv_NotaFiscal[cont].QtdeItens);
fprintf(fp,"%s;",pv_NotaFiscal[cont].CategoriaNota);
fprintf(fp,"%s;\n",pv_NotaFiscal[cont].TipoFrete);
fclose (fp);
printf ("\n\nDados Gravados com sucesso!\n\n");
}
}
// função principal usei o setbuf apenas para limpar o buffer do teclado e evitar erro na gravação
int main ()
{
char op;
do{
struct st_Nota_Fiscal dados[cont];
printf ("Digite o Codigo da NF: ");
scanf ("%d", &dados[cont].CodigoNF);
setbuf (stdin, NULL);
printf ("Digite a data da emissao da NF [DD/MM/AAAA]: ");
gets (dados[cont].DT_Emissao);
setbuf (stdin, NULL);
printf ("Digite o codigo do cliente: ");
scanf ("%d", &dados[cont].CodigoCliente);
setbuf (stdin, NULL);
printf ("Digite a quantidade disponivel: ");
setbuf (stdin, NULL);
scanf ("%d", &dados[cont].QtdeItens);
setbuf (stdin, NULL);
printf ("Digite a categoria da NF [V] - Venda ou [T] - Transferencia: ");
gets (dados[cont].CategoriaNota);
setbuf (stdin, NULL);
printf ("Digite o tipo do frete [C] - CIF ou [F] - FOB: ");
gets (dados[cont].TipoFrete);
setbuf (stdin, NULL);
Grava_Dados (dados);
cont = cont ++;
printf ("\nDeseja gravar mais alguma NF: ");
scanf ("%c", &op);
} while (op == 'S' || op == 's');
printf ("\nPrograma finalizado com sucesso\n");
return 0;
}
Pergunta
Flavio_Silva
Boa noite!
Pessoal, sei que gravação de dados fica melhor com arquivos binários, mais como é pra estudo preciso da seguinte ajuda:
Um exemplo de saída para o programa abaixo:
1;20150410;89;2;V;F
2;20150411;78;1;T;C
Todos os dados digitados e gravados são separados por " ; ", ou seja, de forma formatada, agora após a gravação e finalização do programa preciso de uma função que imprima na tela no formato abaixo as informações conforme segue:
CodigoNF =
DT_Emissao =
CodigoCliente =
QtdeItens =
CategoriaNota =
TipoFrete =
Se possível também uma outra função que me diga quantos registros tem no arquivo sendo que cada linha gravada representa 01 registro.
Link para o comentário
Compartilhar em outros sites
1 resposta 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.