Ir ao conteúdo

C Dificuldade com Variável Booleana


Ir à solução Resolvido por kgin,

Posts recomendados

Postado

Boa noite, estou com dificuldade em um código iniciante, estou acompanhando videos youtube e lendo alguns fóruns e em um dos vídeos me deparei com essa dúvida pois até no vídeo não funcionou mas não tive retorno,vale lembrar que comecei tem pouco tempo então me desculpem a ignorância, o que está ocorrendo é o seguinte:

Variável booleana aceita receber um valor no scanf? ( 0 ou 1 )

Só funciona em alguma condicional? ( if, ...)

Quando executo o programa ele mostra o resultado da variável booleana, mas não mostra do char, fui testando linha por linha e vi que se desativar o scanf da booleana o char funciona, vou colocar o código aqui para ficar mais prático de entender, estou colocando também a imagem da execução do programa, onde deveria aparecer o char não mostra nada, Obrigado.

#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h> // biblioteca ultilizada para adc variáveis booleanas ou seja variáveis do tipo lógico

main(){

    //definindo variáveis

    int a;

    float b;

    char c;

    bool d;

    //passar os valores

    a = 5;

    b = 2.5;

    c = 'c';

    d = true;

    //imprimindo na tela

    printf("\nO valor de a = %d", a);

    printf("\nO valor de b = %.2f", b); //se adicionar um ponto e um  número entre % e o f, podemos definir a formatação do float ao imprirmir

    printf("\nO valor de c = %c", c);

    printf("\nO valor de d = %d\n", d);

    //lendo valores na tela

    scanf("%d", &a);

    scanf("%f", &b);

    scanf(" %c", &c); //em linguagem C quando se lê um carctere, coloca se espaço entre as aspas duplas e o símbolo de c

    scanf("%d", &d);

    //reescrevendo o valor na tela

    printf("\n O valor de a = %d", a);

    printf("\n O valor de b = %.1f", b);

    printf("\n O valor de c = %c", c);

    printf("\n O valor de d = %d\n", d);

    //pausando

    system("pause");

}

boolean.png

  • Amei 1
Postado

@iTzCrazy    essa variável booleana está aceitando valores int ,   mas na verdade o tipo bool tem pouca utilidade ou nenhuma ,  pois uma bool na linguagem c só pode ter dois valores true ou false ,  ou zero ou um ,  pois em  c  o zero siginifica false , e Qualquer outro valor é true .

  • Curtir 2
  • Solução
Postado

@iTzCrazy Seu problema não é com a stdbool e sim com a entrada padrão.

 

toda vez que você entra com alguma coisa via teclado, e tecla enter o scanf só pega os dados que você pediu.

então quando você faz um

	scanf("%i", &valor);

ele vai pegar um inteiro sem sinal e deixar a tecla enter (carrier return, codigo 0xDh=13 na tabela ascii).

o "jeito certo" seria pegar as informações com o fgets, mas já que você é iniciante só coloque um "%*c" no scanf para ignorar a tecla.

exemplo:

	scanf("%i%*c", &valor);

 

Seu algoritmo funcionando

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> // biblioteca ultilizada para adc variáveis booleanas ou seja variáveis do tipo lógico

int main(void)
{
    //definindo variáveis
    int a;
    float b;
    char c;
    bool d;
    char tecla = '\0';

    //passar os valores
    a = 5;
    b = 2.5;
    c = 'c';
    d = true;

    //imprimindo na tela
    printf("\nO valor de a = %d", a);
    printf("\nO valor de b = %.2f", b); //se adicionar um ponto e um  número entre % e o f, podemos definir a formatação do float ao imprirmir
    printf("\nO valor de c = %c", c);
    printf("\nO valor de d = %d\n", d);

    //lendo valores na tela
    scanf("%d%*c", &a);
    scanf("%f%*c", &b);
    scanf("%c%*c", &c); //em linguagem C quando se lê um carctere, coloca se espaço entre as aspas duplas e o símbolo de c
    scanf("%c%*c", &tecla);
    if (tecla == 'T' || tecla == 't') {
        d = true;
    } else {
        d = false;
    }


    //reescrevendo o valor na tela
    printf("\n O valor de a = %d", a);
    printf("\n O valor de b = %.1f", b);
    printf("\n O valor de c = %c", c);
    printf("\n O valor de d = %d\n", d);
    
    //pausando
    getchar();
    return(0);
}

 

  • Obrigado 2
Postado

@iTzCrazy Quando compilou o seu código o compilador deve ter mostrado um warning como este,

 

main.c:47:13: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘_Bool *’ [-Wformat=]

 

Veja que ele aponta a linha do scanf para a entrada bool. Isso porque no scanf você usou o especificador para int (%d), então é esperado que o outro argumento seja o endereço para int e não bool.

  • Curtir 2
  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!