Ir ao conteúdo

Posts recomendados

Postado

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;
}

 

Postado
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. 

Postado

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í.

Postado
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.

Postado
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
Postado

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
Postado
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.

Postado

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
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!