Ir para conteúdo

Arquivado

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

ipablo77

Problema de iniciante.

Recommended Posts

Consegui fazer quase toda a questão, só tem um problema: Como fazer o 0 não entrar no valor da variável menor.

Problema: Fazer um programa para ler N números, e informa o qual o menor deles, até que o 0 seja lido e o programa encerrado. Obviamente o 0 não poderá contar, se não ele será o menor valor.

Já tentei, várias soluções diferentes e sem sucesso. Poderiam me dar uma luz, de como fazer esse bendito 0 não entrar como menor?

O que eu fiz:

int numero, menor;

printf("Digite um número: ");
scanf("%d",&numero);
numero = menor;
while (numero > 0){
printf("Digite um número: ");
scanf("%d",&numero);
if (numero < menor ){
menor = numero;
printf("O menor número é: %d",menor);
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensa comigo... Quando você atribuiu o menor ao número " numero = menor;", você está substituindo o valor que você leu por uma variável ainda indefinida (geralmente 0). Então, onde diz " numero = menor;", o correto seria "menor = 999999";

Ainda te dou um toque... Você não precisa do comando ler o valor 2 vezes (printf e scanf). Se você atribuir ao numero um valor maior que zero antes de entrar no while, o while será executado....

E... mais uma coisinha... Se eu digitar no teu programa um número negativo.... O que vai acontecer????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você quer pegar o menor número de N números, não tem porque você apresentar o menor dentro do laço while. E para não usar o scanf duas vezes você poderia colocá-lo como argumento do próprio while. E como santamariense disse, se você quer o menor, o primeiro valor deve ser o maior valor possível dentro do seu universo de números.

Segue uma ideia do problema (pelo que eu entendi).

#include <climits> // Para usar o macro INT_MAX
.
.
.
   printf("Digite seus números\n");
   int menor = INT_MAX; // OU ...
   int menor_outroJeito = (2^31) - 1 ; // Tamanho máximo de inteiro (positivo) sem usar <climits>. 
   while (scanf("%d", &n) && n>0) { // Aqui você já verifica se está pegando algo no scanf e se o valor é válido.      
      menor = (menor > n)? n:menor; // Atualiza novo menor valor.
      // Ou  menor_outroJeito = (menor_outroJeito > n)? n: menor_outroJeito;
   }
   // Imprima o menor valor.
.
.
.

Compartilhar este post


Link para o post
Compartilhar em outros sites


int is_first = 1;

int number;

int menor;

while (scanf("%d", &number) && number != 0) {

if (is_first) {

menor = number;

is_first = 0;

} else {

if (number < menor) {

menor = number;

}

}

}

if (is_first) {

puts("Não foi informado nenhum número");

} else {

printf("Menor número: %d\n", menor);

}

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.