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.
#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; }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.