-
Total de itens
4 -
Registro em
-
Última visita
Sobre Flavio_Silva

Flavio_Silva's Achievements
0
Reputação
-
<script type='text/javascript'>window.mod_pagespeed_start = Number(new Date());</script> Boa tarde! Seu código não tem erro, pode ser sua IDE, aqui esta normal, é obvio que um laço de repetição ficaria melhor mais como voce disse tem que ficar assim.
-
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; }
-
(Resolvido) Gravar dados de Struct em Arquivo texto
pergunta respondeu ao Flavio_Silva de Flavio_Silva em C, C++
Boa noite! Então, devido a minha falta de experiência e mesmo tão bem comentado não consegui entender sua resposta, mais consegui fazer a adaptação necessária conforme segue abaixo: #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; } Assim consegui a saída informada. Agradeço pela atenção, se achar um modo de melhorar pode informar. -
Boa noite pessoal ! Estou com problemas no código abaixo, pois na minha função Grava_Dados o parâmetro pv_NotaFiscal precisa ser um vetor, dai eu não consigo fazer ele funcionar, alguém poderia me ajudar? #include <stdio.h> #include <stdlib.h> struct st_Nota_Fiscal { int CodigoNF; char DT_Emissao[8]; int CodigoCliente; int QtdeItens; char CategoriaNota[1]; char TipoFrete[1]; }; enum boolean { true = 1, false = 0 }; typedef enum boolean Grava_dados; Grava_Dados (struct st_Nota_Fiscal pv_NotaFiscal) // O problema é que pv_NotaFiscal precisa ser um vetor e não uma string { FILE *fp; fp = fopen ("NF_010015.txt", "a"); if (fp == NULL) { return (false); exit(1); } else { fprintf(fp,"%i;%s;%i;%i;%s;%s;\n",pv_NotaFiscal.CodigoNF, pv_NotaFiscal.DT_Emissao, pv_NotaFiscal.CodigoCliente, pv_NotaFiscal.QtdeItens, pv_NotaFiscal.CategoriaNota, pv_NotaFiscal.TipoFrete); fclose (fp); return (true); } } int main () { char op; do{ struct st_Nota_Fiscal dados; printf ("Digite o Codigo da NF: "); scanf ("%d", &dados.CodigoNF); setbuf (stdin, NULL); printf ("Digite a data da emissao da NF: "); gets (dados.DT_Emissao); setbuf (stdin, NULL); printf ("Digite o codigo do cliente: "); scanf ("%d", &dados.CodigoCliente); setbuf (stdin, NULL); printf ("Digite a quantidade disponivel: "); setbuf (stdin, NULL); scanf ("%d", &dados.QtdeItens); setbuf (stdin, NULL); printf ("Digite a categoria da NF [V] - Venda ou [T] - Transferencia: "); gets (dados.CategoriaNota); setbuf (stdin, NULL); printf ("Digite o tipo do frete [C] - CIF ou [F] - FOB: "); gets (dados.TipoFrete); setbuf (stdin, NULL); Grava_Dados (dados); printf ("Deseja gravar mais alguma NF: "); scanf ("%c", &op); } while (op == 'S' || op == 's'); return 0; } A saída precisa ser separada com " ; ", conforme exemplo: 1;20150410;89;2;V;F 2;20150411;78;1;T;C