Ir ao conteúdo
  • Cadastre-se

Laço FOR não para.


nilzon

Posts recomendados

Boa noite, poderiam dar uma olhada no código em C, e me explicarem se possível, porque o meu FOR não quer incrementar 1 na varável i, ou seja, ele nunca para. 

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>

int main(){
        
        setlocale(LC_ALL, "Portuguese");        

        char sexo;
        float altura,media_alt_homens, cont_homens, maior_alt_mulher, menor_altura, maior_altura, tot_alt_homens;
        
        
                for(int i = 1; i <= 3; i++){
                        printf("Informe o sexo da %dº pessoa: F ou M. \n", i);
                        scanf("%s", &sexo);
                        printf("Informe a altura: \n");
                        scanf("%f", &altura);

                        
                        if(altura > maior_altura){
                                maior_altura = altura;
                        }
                        if(altura < menor_altura){
                                menor_altura = altura;
                        }
                        
                        if(sexo == 'm'){
                                cont_homens++;
                                tot_alt_homens += altura;
                                media_alt_homens = tot_alt_homens / cont_homens;
                        }else if(sexo == 'f'){
                                if(altura > maior_alt_mulher){
                                maior_alt_mulher = altura;
                                }
                        }else{
                                printf("Sexo Inválido.\n");
                        }       
                        
                }               
        
        
        printf("A maior altura é: %.2f\n", maior_altura);
        printf("A menor altura é: %.2f\n", menor_altura);
        printf("A média da altura dos homens é: %.2f\n", media_alt_homens);
        printf("A altura da mulher mais alta é: %.2f\n", maior_alt_mulher);
        printf("A quantidade de homens era: %.0f\n", cont_homens);
        
        return 0;
}

 

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, zopek disse:

@nilzon  Dependendo do compilador, ele não "entende" a inicialização de uma variavel dentro do FOR, tente inicializar fora.

Funciona, sempre fiz assim usando o DEV C++, só que especificamente esse código não está funcionando. 

Mas de qualquer forma, tentei i++ fora do FOR, também não deu. 

 

Obs, tentei utilizando o WHILE também, com um contador dentro, mesmo assim não funcionou. 

Link para o comentário
Compartilhar em outros sites

if (altura > maior_altura)

if (altura < menor_altura) e os outros IF's...

 

No primeiro for, quando ele for comparar, qual o valor dessas variáveis maior_altura e menor_altura? Não tem como comparar se elas não foram inicializadas com um valor

Deve tá gerando uma exception aí.

Link para o comentário
Compartilhar em outros sites

50 minutos atrás, Júnio Teixeira disse:

if (altura > maior_altura)

if (altura < menor_altura) e os outros IF's...

 

No primeiro for, quando ele for comparar, qual o valor dessas variáveis maior_altura e menor_altura? Não tem como comparar se elas não foram inicializadas com um valor

Deve tá gerando uma exception aí.

Ok, mesmo se eu consertar isso, o meu FOR ainda não quer parar... e é esse o meu problema. 

Mesmo se eu usar o WHILE com um Contador, ele não para.

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, nilzon disse:

Ok, mesmo se eu consertar isso, o meu FOR ainda não quer parar... e é esse o meu problema. 

Mesmo se eu usar o WHILE com um Contador, ele não para.

Rodei seu código pra testar, deu as exceptions que eu falei, mas saiu do for sem problemas.

Não sei qual compilador você tá usando nem qual IDE, mas mesmo depois de arrumar esses problemas no seu continuou travado?

Se sua IDE tiver, tenta usar debug com alguns breakpoints para ir vendo o andar de cada linha.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ele quis dizer para tentar assim

Citação

int i;

for(i = 1; i <= 3; i++)

 

Quanto ao erro, é porque você está lendo um char com %s, faça assim

printf("Informe o sexo da %dº pessoa: F ou M. \n", i);
     scanf("%c%*c", &sexo);
     printf("Informe a altura: \n");
     scanf("%f%*c", &altura);
Citação

%*c   ignora um caracter do buffer, é como se fosse o fflush

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

1 hora atrás, MassakiMsk disse:

Ele quis dizer para tentar assim

 

Quanto ao erro, é porque você está lendo um char com %s, faça assim


printf("Informe o sexo da %dº pessoa: F ou M. \n", i);
     scanf("%c%*c", &sexo);
     printf("Informe a altura: \n");
     scanf("%f%*c", &altura);

 

Nossa mano, funcionou. Mas porque eu não posso usar %s para ler um 'f' ou 'm' ? Poderia me explicar ?

E porque nesse caso eu precisei do %*, isso nunca aconteceu cmg antes. MUITO Obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

O %s vai tentar salvar a letra (m ou f) e o \0 para finalizar a frase, ou seja, você vai usqr 2 espaços de char sendo que você declarou o char com 1 posição só.

O %*c vai tirar o enter do buffer do teclado, se não tirar o enter ele vai ser guardado no char, não é isso que você quer.

Até onde eu sei é assim que funciona, desculpa se tiver falado besteira, sou estudante ainda.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!