Seguinte, coisas bizarras acontecem em C, e estou presenciando uma delas!
Me parece um erro do compilador, e como eu não entendo NADA de compilador, deve ser por isso que não consigo resolver o problema:
Como já postei algumas vezes aqui, tenho um programa que obtem dados de um arquivo externo, e vai fazendo contas, cada vez pegando um novo dado do arquivo externo, e imprimindo as contas em ou utro arquivo externo.
Estive trabalhando com dados em torno de 58mil linhas (cada linha tem um dado, que é um valor), e não tinha problemas. Eu gerava n arquivos (digitados pelo usuario) contendo essas 58mil linhas ou até um pouco menos, umas 2 mil a menos (uma constante definida pelas contas do programa).
E até aí, meu programa estava perfeito!
O problema é que meu chefe resolveu usar uns dados que possuem 66931 linhas (pra ser exato!) e comecei a ter problemas:
-meus arquivos de saída, todos eles, estão com algo em torno de 65mil linhas, só! as outras não estão aparecendo!
(nesse caso, não há as +ou- 2 mi linhas não escritas... são algo em terno de 20 ou 30 linhas a menos, só, e ele está me dando mais de 1500 linhas a menos!!!
Não consegui entender aonde estava o problema, então resolvi testar alternativas para ver se o problema se resolvia, e cheguei à alternativa mais bizarra de todas!!!
como forma de testar a impressão do arquivo, numa inicialização inicial, aonde somente o arquivo era lido, resolvi imprimir cada dado lido num outro arquivo de saida, para ver o que dava.
A principio, o mesmo problema: somente umas 65k linhas eram impressas.
Depois, resolvi DELETAR O RESTO DO PROGRAMA! simplesmente deixei o meu programa com a inicialização que descrevi acima, e, para minha surpresa, funcionou!!!!!
Voltei a colocar o resto do programa, e deu erro novamente!
e em nenhum ponto eu reedito o arquivo no resto do programa, então, explicitamente: se meu codigo está grande, ou completo, não imprime todas as linhas, com um codigo pequeno, imprime todas as linhas!
aí vai o codigo enxuto, somente com a inicializacao:
Pergunta
Felipe Amadio
Seguinte, coisas bizarras acontecem em C, e estou presenciando uma delas!
Me parece um erro do compilador, e como eu não entendo NADA de compilador, deve ser por isso que não consigo resolver o problema:
Como já postei algumas vezes aqui, tenho um programa que obtem dados de um arquivo externo, e vai fazendo contas, cada vez pegando um novo dado do arquivo externo, e imprimindo as contas em ou utro arquivo externo.
Estive trabalhando com dados em torno de 58mil linhas (cada linha tem um dado, que é um valor), e não tinha problemas. Eu gerava n arquivos (digitados pelo usuario) contendo essas 58mil linhas ou até um pouco menos, umas 2 mil a menos (uma constante definida pelas contas do programa).
E até aí, meu programa estava perfeito!
O problema é que meu chefe resolveu usar uns dados que possuem 66931 linhas (pra ser exato!) e comecei a ter problemas:
-meus arquivos de saída, todos eles, estão com algo em torno de 65mil linhas, só! as outras não estão aparecendo!
(nesse caso, não há as +ou- 2 mi linhas não escritas... são algo em terno de 20 ou 30 linhas a menos, só, e ele está me dando mais de 1500 linhas a menos!!!
Não consegui entender aonde estava o problema, então resolvi testar alternativas para ver se o problema se resolvia, e cheguei à alternativa mais bizarra de todas!!!
como forma de testar a impressão do arquivo, numa inicialização inicial, aonde somente o arquivo era lido, resolvi imprimir cada dado lido num outro arquivo de saida, para ver o que dava.
A principio, o mesmo problema: somente umas 65k linhas eram impressas.
Depois, resolvi DELETAR O RESTO DO PROGRAMA! simplesmente deixei o meu programa com a inicialização que descrevi acima, e, para minha surpresa, funcionou!!!!!
Voltei a colocar o resto do programa, e deu erro novamente!
e em nenhum ponto eu reedito o arquivo no resto do programa, então, explicitamente: se meu codigo está grande, ou completo, não imprime todas as linhas, com um codigo pequeno, imprime todas as linhas!
aí vai o codigo enxuto, somente com a inicializacao:
#include <stdio.h> #include <stdlib.h> #include <math.h> #define _FILE_OFFSET_BITS =64 int main() { int i, j, filtro, mult, controle, div; int minactivefloat, volume, estoque, debito, maxactivefloat, passoactivefloat, activefloat; long vol1, vol2; double financeiro, Pestoque, Festoque, volmedia, volacumulado; double preco1, preco2, pct; char *strgp, *strgv1, *strgv2, *strgr, *str, *strcontrole, buf[100]; char c1; FILE *p1, *v1, *p2, *v2, *pcto, *cont; i=0; volume = 0; financeiro = 0; Festoque = 0; Pestoque = 0; volacumulado = 0; strgp = "preço.txt"; strgv1 = "vol.txt"; strgv2 = "vol2.txt"; strgr = "result.csv"; //Ajusta os separadores de decimal p1 = fopen(strgp,"r+"); fseek(p1,0,SEEK_END); fprintf(p1,"*"); fseek(p1,0,SEEK_SET); while (c1!='*') { fscanf(p1,"%c",&c1); if (c1 == ',') { fseek(p1, -1, SEEK_CUR); fprintf(p1,"."); fseek(p1, 1, SEEK_CUR); } } v1 = fopen(strgv1,"r+"); fseek(v1,0,SEEK_END); fprintf(v1,"*"); fseek(v1,0,SEEK_SET); while (c1!='*') { fscanf(v1,"%c",&c1); if (c1 == ',') { fseek(v1, -1, SEEK_CUR); fprintf(v1,"."); fseek(v1, 1, SEEK_CUR); } } fclose(v1); fclose(p1); //fim //--------------------------- p1 = fopen(strgp,"r"); p2 = fopen(strgp,"r"); //Calcula a média v1 = fopen(strgv1,"r"); c1 = '0'; i=0; strcontrole = "controle.txt"; cont = fopen(strcontrole,"w"); while (c1!='*') { fscanf(v1,"%ld", &vol1); fprintf(cont,"%ld\n", vol1); volacumulado = volacumulado + vol1; i++; fscanf(v1,"%c", &c1); if (c1!='\n') { fscanf(v1,"%c", &c1); fseek(v1, -2, SEEK_CUR); } else fseek(v1, -1, SEEK_CUR); } volmedia = volacumulado/i; printf("\nVolume Total = %lf\nNumero de Linhas = %ld\nMedia = %lf\n\n", volacumulado, i, volmedia); fclose(v1); //fim return 0; }Link para o comentário
Compartilhar em outros sites
2 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.