Ir para conteúdo
Fórum Script Brasil

Flavio_Silva

Membros
  • Total de itens

    4
  • Registro em

  • Última visita

Tudo que Flavio_Silva postou

  1. <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.
  2. 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; }
  3. 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.
  4. 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
×
×
  • Criar Novo...