Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SummerGirl

Lendo e apresentando informações na tela

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.