rafaieu 0 Denunciar post Postado Abril 18, 2013 Bom dia,Pessoal estou desenvolvendo um trabalho para faculdade porém estou quebrando a cabeça em um problema que me surgiu.O programa consistem em gravar dados com struct, salvar em .txt e depois que o programa for fechado preciso listar os arquivos que estão no .txt.Tai o problema, preciso contar quantas linhas tem no arquivo .txt para definir quantas vezes o laco vai rodar mas não consigo fazer isso, tentei usar a funcao while (!feof(arq)) não entra em laõ infinito.Vou postar apenas a funcao se preferirem eu posto o codigo inteiro. void abre(struct reg pessoa[1000]){ int i,j=0,k=0; FILE *arq; arq=fopen("dados.txt","r"); if(arq == NULL){ printf("Arquivo nao pode ser aberto"); sleep(1000); } else if(arq != NULL){ while (!feof(arq)) i++; for(j=0; j<=i j++) fscanf(arq,"%s %f\n", &pessoa[j].nome, &pessoa[j].imc); for(j=0; j<=i; j++) printf("NOME: %s IMC: %f\n",pessoa[j].nome,pessoa[j].imc); fflush(stdin); } Pessoal desculpa, to com problema no Chrome e não estou conseguinto indentar.. Compartilhar este post Link para o post Compartilhar em outros sites
rafaieu 0 Denunciar post Postado Abril 18, 2013 Bom dia, Pessoal estou desenvolvendo um trabalho para faculdade porém estou quebrando a cabeça em um problema que me surgiu. O programa consistem em gravar dados com struct, salvar em .txt e depois que o programa for fechado preciso listar os arquivos que estão no .txt. Tai o problema, preciso contar quantas linhas tem no arquivo .txt para definir quantas vezes o laco vai rodar mas não consigo fazer isso, tentei usar a funcao while (!feof(arq)) não entra em laõ infinito. Vou postar apenas a funcao se preferirem eu posto o codigo inteiro. void abre(struct reg pessoa[1000]){ int i,j=0,k=0; FILE *arq; arq=fopen("dados.txt","r"); if(arq == NULL){ printf("Arquivo nao pode ser aberto"); sleep(1000); } else if(arq != NULL){ while (!feof(arq)) i++; for(j=0; j<=i j++) fscanf(arq,"%s %f\n", &pessoa[j].nome, &pessoa[j].imc); for(j=0; j<=i; j++) printf("NOME: %s IMC: %f\n",pessoa[j].nome,pessoa[j].imc); fflush(stdin); } Pessoal desculpa, to com problema no Chrome e não estou conseguinto indentar.. Pessoal fiz uma gambiarra enorme, mais ta funcionando perfeitamente acho que o professora vai levar em consideração... a solução que eu pensei é a seguinte. na minha funcao grava, eu inserio 3 variaveis para o txt um interio = posicao 1 string = nome e um float = imc depois usei essa funcao void abre(struct reg pessoa[1000]){ int i=0,j=0,k=0,temp=0; float tempf=0; char tempc=0; FILE *arq; arq=fopen("dados.txt","r"); if(arq == NULL){ printf("Arquivo nao pode ser aberto"); sleep(1000); }else if(arq != NULL){ fscanf(arq,"%i %f %c", &k ,tempc, &tempf); // printf("valor de k %i %c",k,tempc); //printf("\nNOME: %s IMC: %f %i\n",pessoa[j].nome,pessoa[j].imc,k); for(j=0; j<k; j++) fscanf(arq,"%s %f %i", &pessoa[j].nome, &pessoa[j].imc, &temp); for(j=0; j<k; j++) printf("NOME: %s IMC: %f\n",pessoa[j].nome,pessoa[j].imc); fflush(stdin); } Compartilhar este post Link para o post Compartilhar em outros sites