linkans 0 Denunciar post Postado Novembro 4, 2009 Oi Escrevi um programa que lê uma lista de nomes, idades, sexos, pesos, alturas e IMC's. As informações foram gravadas em dados.txt. Agora preciso ler esse arquivo, apresentar as informações na tela no formato de tabela, ordenadas por IMC(crescente) e sua respectiva classificação. Exemplo com apenas nome, peso, altura. int main() { char nome[100][30];float peso[100], altura[100]; FILE *arquivo;int i; arquivo=fopen("dados.txt","w"); for (i=1;i<=100;i++) { printf("Entre com o nome: "); gets(nome[i]); printf("Entre com o peso: "); scanf("%f",&peso[i]); getchar(); printf("Entre com a altura: "); scanf("%f",&altura[i]); getchar(); fprintf(arquivo,"%30s %6.2f %5.2f \n", nome[i],peso[i],altura[i]); } for(i=1;i<=100;i++) /* calculo do IMC e sua classificação: normal, sobrepeso */ {... } fclose(arquivo); return(0); } /* Abrir novamente para leitura */ arquivo=fopen("dados.txt","r"); O algoritmo de ordenação eu já sei. Porem, não estou conseguindo ler as informações para usar a função que ordena e apresenta-las na tela. Alguém tem uma ideia? p.s. usando windows xp, dev-c++. Compartilhar este post Link para o post Compartilhar em outros sites
José Enésio 4 Denunciar post Postado Novembro 4, 2009 Olha só for (i=1;i<=100;i++) Aqui vai dar problema porque a array de 100 posições vai de 0 até 99! fprintf(arquivo,"%30s %6.2f %5.2f \n", nome,peso,altura); Aqui você grava os dados no arquivo, preste atenção como faz a escrita aí, você usará o mesmo format para ler o arquivo com fscanf depois sabe? Outra coisa gets(nome); Sugiro que use fgets para essa leitura. Compartilhar este post Link para o post Compartilhar em outros sites
linkans 0 Denunciar post Postado Novembro 5, 2009 José, ainda continuo sem conseguir ler...o que tem de errado? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> int main() { char nome[100][30],aux_nome[100][30];float peso[100], altura[100],aux_peso[100],aux_altura[100];int trocou; FILE *arquivo;int i; arquivo=fopen("dados.txt","w"); for (i=0;i<100;i++) { printf("Entre com o nome: "); gets(nome[i]); printf("Entre com o peso: "); scanf("%f",&peso[i]); getchar(); printf("Entre com a altura: "); scanf("%f",&altura[i]); getchar(); fprintf(arquivo,"%30s %6.2f %5.2f \n", nome[i],peso[i],altura[i]); } system("pause"); rewind (arquivo); fscanf(arquivo,"%-30s %3d %c\n", nome[i],peso[i],altura[i]); fclose(arquivo); do {trocou=0; for (i=0;i<99;i++) if (peso[i]>peso[i+1]) { aux_peso[i]=peso[i]; peso[i]=peso[i+1]; peso[i+1]=aux_peso[i]; aux_altura[i]=altura[i]; altura[i]=altura[i+1]; altura[i+1]=aux_altura[i]; strcpy(aux_nome[i],nome[i]); strcpy(nome[i],nome[i+1]); strcpy(nome[i+1],aux_nome[i]); } trocou=1; } while(trocou==1); printf("________________________________________________________________________"); printf("\n\nnome\tpeso\taltura"); printf("\n________________________________________________________________________"); for(i=0;i<99;i++) printf("\n%-30s \t%3d \t%c\n", nome[i],peso[i],altura[i]); system("pause"); } Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Novembro 5, 2009 char nome[100][30],aux_nome[100][30];float peso[100], altura[100],aux_peso[100],aux_altura[100];int trocou; Eu espero que você não tenha o hábito de declarar as variáveis assim, porque fica horrível p/ ler. printf("Entre com o nome: "); gets(nome[i]); Não use gets. Procure no fórum. arquivo.c: In function ‘main’:arquivo.c:26: warning: unknown conversion type character ‘-’ in format arquivo.c:26: warning: format ‘%3d’ expects type ‘int *’, but argument 3 has type ‘char *’ arquivo.c:26: warning: format ‘%c’ expects type ‘char *’, but argument 4 has type ‘double’ arquivo.c:26: warning: too many arguments for format arquivo.c:52: warning: format ‘%3d’ expects type ‘int’, but argument 3 has type ‘double’ arquivo.c:52: warning: format ‘%c’ expects type ‘int’, but argument 4 has type ‘double’ arquivo.c:54: warning: control reaches end of non-void function Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Novembro 5, 2009 tipo assim: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ char nome[100][30],aux_nome[100][30];float peso[100], altura[100],aux_peso[100],aux_altura[100];int trocou; FILE *arquivo;int i; arquivo=fopen("dados.txt","w+"); //for (i=0;i<2;i++){ i=0; printf("Entre com o nome: "); scanf("%s%*c",nome[i]); printf("Entre com o peso: "); scanf("%f%*c",&peso[i]); printf("Entre com a altura: "); scanf("%f%*c",&altura[i]); fprintf(arquivo,"%30s %6.2f %5.2f \n", nome[i],peso[i],altura[i]); //} fclose(arquivo); arquivo=fopen("dados.txt", "r"); fscanf(arquivo,"%30s %6.2f %5.2f", aux_nome[i], aux_peso[i], aux_altura[i]); fclose(arquivo); // do{ // trocou=0; // for (i=0;i<99;i++) // if (peso[i]>peso[i+1]) //{ // aux_peso[i]=peso[i]; // peso[i]=peso[i+1]; // peso[i+1]=aux_peso[i]; // // aux_altura[i]=altura[i]; // altura[i]=altura[i+1]; // altura[i+1]=aux_altura[i]; // // strcpy(aux_nome[i],nome[i]); // strcpy(nome[i],nome[i+1]); // strcpy(nome[i+1],aux_nome[i]); //} //trocou=1; //} //while(trocou==1); printf("________________________________________________________________________"); printf("\n\nnome\tpeso\taltura"); printf("\n________________________________________________________________________"); //for(i=0;i<99;i++) printf("\n%30s %6.2f %5.2f \n", nome[i],peso[i],altura[i]); system("pause"); return 0; } []s Compartilhar este post Link para o post Compartilhar em outros sites