Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Desafio: Verificação de desconto

Devido à complexidade preferi resolver no DEV-C++, mas ainda há um erro já que está imprimindo duas vezes quando entro com a idade menor que 18 (primeiro if ).

Solicito apoio, se puderem!

Proposta de solução:

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

int main()

{
    int idade;
    char texto = 'S';
    bool S;
    
    printf("Digite a sua idade:\n");
    scanf("%d",&idade);
        
    if(idade<18)
    {
        printf("\n Meia-entrada aplicada");
    }
     
    else if (idade>=18)
{
    printf("\n Estudante? [S/N]");
    scanf("%s",&texto);
}

if(texto == 'S')
    printf("\n Meia-entrada aplicada");
   
else if (texto == 'N')
{
        printf("O valor a pagar eh integral \n");
}
         		 
system("pause");
return(0);
}

Grato!
Gil

1 resposta

Olá, Gil! Como vai?

Pelo que você descreveu, parece que o problema está na forma como o programa está lidando com a variável texto.

Quando a idade é menor que 18, o programa já imprime "Meia-entrada aplicada", mas depois ainda pergunta se a pessoa é estudante, o que não deveria acontecer nesse caso. Para corrigir isso, você pode modificar a lógica para que a verificação de estudante só ocorra se a idade for 18 ou mais. Vou sugerir uma pequena alteração no seu código:

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

int main()
{
    int idade;
    char texto = 'S';
    
    printf("Digite a sua idade:\n");
    scanf("%d", &idade);
        
    if (idade < 18) {
        printf("\n Meia-entrada aplicada");
    } else {
        printf("\n Estudante? [S/N]");
        scanf(" %c", &texto); // Note o espaço antes de %c para ignorar espaços em branco

        if (texto == 'S') {
            printf("\n Meia-entrada aplicada");
        } else if (texto == 'N') {
            printf("O valor a pagar eh integral \n");
        }
    }
    
    system("pause");
    return 0;
}

Algumas mudanças importantes:

  1. A verificação se a pessoa é estudante só acontece se a idade for 18 ou mais.
  2. Usei %c no scanf para ler um único caractere e adicionei um espaço antes de %c para garantir que ele ignore qualquer espaço em branco que possa estar no buffer do teclado.

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado