Publicada por alequimico em 21/06/2007 - 14:27h:
* alequimico usa Kali

Oi pessoal!!

Estou com uma dúvida, possivelmente besta, mas tem coisas que simplesmente ficam obscuras pra gente... sempre fiz programas em C no turbo C e muitos no linux, mas recentemente, me deparei com uma situação inédita, simplesmente não consigo mais formatar minhas saídas de floats...
Toda vez que tento imprimi-las, os resultados saem os mais estranhos possíveis... fiz um programa o mais simples possivel pra vcs verem a loucura. O q o programa faz nada mais eh que ler 10 numeros e ao final mostrar o maior numero digitado, o menor e a média. Código:

#include<stdio.h>

int main(){
float menor=0.0,media=0.0, maior=0.0, num, esp;
int i;
for(i=0;i<10;i++){
printf("nnumero: ");
scanf("%f",&num);
if(i==0){maior=num; menor=num;esp=num;} else
{
maior=(num>=maior) ? num:maior;
menor=(num<menor) ? num:menor;
esp+=num;
}
}
printf("nMaior numero: %dnMenor mumero: %dnMédia: %4.2fn",maior, menor,esp/10);
return 1;
}

_______________________________________

O Resultado exibido:

numero: 1

numero: 2

numero: 3

numero: 4

numero: 5

numero: 6

numero: 7

numero: 8

numero: 9

numero: 10

Maior numero: 0
Menor mumero: 1076101120
Média: 1.00

Que diabos estou fazendo errado???

  
 
Resposta de sombriks em 21/06/2007 - 14:59h:
* sombriks usa Slackware
* sombriks tem conceito: 8.7
 


#include<stdio.h>

int main(){
   
   float menor=0.0, maior=0.0, num, esp;
   int i;
   
   for(i=0;i<10;i++){
      printf("numero: ");
      scanf("%f",&num);
      if(i==0){
         maior=num;
         menor=num;
         esp=num;
      }else{
         maior=(num>=maior) ? num : maior;
         menor=(num<menor) ? num : menor;
         esp+=num;
      }
   }
   printf("\nMaior numero: %f \nMenor mumero: %f \nMédia: %4.2f\n",maior, menor,esp/10);
   return 1;
}

//gcc -Wall maiormenormedia.c -o maiormenormedia


aparentemente vc estava passando seus flosts onde deveria ser decimal. pelo menos os %d significam isso.

 
Resposta de cefas em 21/06/2007 - 15:35h:
* cefas usa Debian
* cefas tem conceito: 9.0
 


Faz algum tempo que não programo em C, mas se não me falha a memória, float é formatado com "%g".

Espero ter ajudado! Qualquer coisa, retorne a mensagem. Até mais.

 
Resposta de alequimico em 21/06/2007 - 16:04h:
* alequimico usa Kali
* alequimico tem conceito: 9.3
 


Realmente o programa agora funcionou... mas é interessante notar que como é que a máscara de formatação %d pode atrapalhar o resultado de outra que estava com o %f. Isso pra mim irá ficar como uma icógnita. :( Mas em todo caso, muito obrigado a vc Sombriks e a vc Cefas!!!

 
Resposta de RogerioRamos em 21/06/2007 - 16:37h:
* RogerioRamos usa Ubuntu
* RogerioRamos tem conceito: 9.0
 


A formatação %4.2f, obrigatoriamante mostra na tela no máximo 4 caracteres antes da vírgula e sempre 2 após dela com ou sem zero.
Eu gostaria de saber se existe alguma técnica de formatação para
imprimir apenas os números necessarios após a vírgula?

 
Resposta de alequimico em 22/06/2007 - 00:11h:
* alequimico usa Kali
* alequimico tem conceito: 9.3
 


Os números necessários são aqueles de que vc precisa... acho que depende apenas da sua própria necessidade da precisão... se vc precisa de uma precisão grande, coloque mais casas decimais, não tem como o programa saber o q vc precisa.

  


ATENÇÃO: Antes de contribuir com uma resposta, leia o artigo Qualidade de respostas e certifique-se de que esteja realmente contribuindo com a comunidade. Muitas vezes o ímpeto de contribuir nos leva a atrapalhar ao invés de ajudar.

Contribuir com resposta



CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
* Nota: só é possível enviar respostas usuário que possui conta e esteja logado com ela, caso contrário sua mensagem será perdida.



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts