#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream>
#include<string.h>
#include<math.h>
#include<locale.h>
main() {
setlocale(LC_ALL, "Portuguese");
float alt = 1, alu = 1, maior, soma = 0, menor, qt = 0;
while (alt != 0) {
printf("Digite a altura do aluno %.0f", alu);
scanf("%f", &alt);
if (alt != 0) {
alu = alu + 1;
if (alu == 2) {
maior = alt;
menor=alt;
} else {}
if (alt > maior) {
maior = alt;
} else {}
if (alt < menor) {
menor = alt;
} else {}
soma = soma + alt;
if (alt > 1.70) {
qt = qt + 1;
} else {}
} else {
printf("\nLEITURA FINALIZADA");
}
}
printf("\nMaior altura=%.2f\nMenor altura=%.2f\nMedia de altura=%.2f\nAlunos maiores que 1.7m=%.0f", maior, menor, soma / (alu - 1), qt);
getchar();
system("pause");
printf("\n\n");
return(0);
}
Testei aqui e não entrou em loop. Quais valores vc digitou? Reparou que o while
só vai parar se altura for zero? Então se digitar qualquer outro valor, o loop continua. Ele entrou em loop mesmo digitando zero?
Outra coisa, else {}
é desnecessário. Se não vai fazer nada no else
, não tem porque colocá-lo.
fiz o código seguindo um curso do youtube.A intenção é justamente a leitura de valores ser interrompida quando a variável “alt” receber o valor zero.Quando testo ele entra em loop com qualquer valor além de zero e que for em float. Testei com valores inteiros e não de problema só que não posso alterar o tipo da variável justamente por ela exigir a altura das pessoas, q é em float. Sobre o else{} o cara do curso falou que serve pra tipo “encerrar” o if{, já q não vai ter nada nesses else{}. Tem como corrigir o negócio de o código entrar em loop qnd digito valores em float?
Testei aqui e não entra em loop. Digitei valores como 1.8
e 2
, entre outros, e funciona normalmente. E quando digito zero (seja 0
ou 0.0
), ele sai do while
, como esperado.
Como eu entendi que vc ainda está aprendendo, existe a possibilidade de vc ter entendido errado - sem ofensa, isso é perfeitamente normal durante o aprendizado. Mas se isso foi realmente dito, então fuja desse curso. Um else
vazio é inútil, não faz sentido nenhum essa justificativa.
Se vc tiver isso:
if (algo) {
faz_algo();
} else {}
É exatamente o mesmo que isso:
if (algo) {
faz_algo();
}
Só que a segunda opção não tem código desnecessário. O }
já encerra o if
, não precisa de mais nada pra encerrá-lo. Se não vai fazer nada no else
, simplesmente não coloque-o no código.
Aproveitando, não tem porque usar nomes abreviados, prefira usar nomes mais claros. Pode parecer bobagem, mas nomes melhores ajudam muito.
E as quantidades podem muito bem ser int
, já que não vai ter “2,4 alunos”. Já os valores da altura devem continuar float
. Sugestão:
float maior, menor, soma = 0;
int aluno = 0, qtdMaiores170 = 0;
while (1) {
printf("Digite a altura do aluno %d: ", aluno + 1);
float altura;
scanf("%f", &altura);
if (altura == 0) {
printf("\nLEITURA FINALIZADA");
break; // sai do while
}
if (aluno == 0) {
maior = menor = altura;
}
if (altura > maior) {
maior = altura;
}
if (altura < menor) {
menor = altura;
}
if (altura > 1.70) {
qtdMaiores170++;
}
soma += altura;
aluno++;
}
printf("\nMaior altura=%.2f\nMenor altura=%.2f\nMedia de altura=%.2f\nAlunos maiores que 1.7m=%d\n", maior, menor, soma / aluno, qtdMaiores170);
Veja aqui como ele não entra em loop e se encerra quando digita-se zero.