Ir ao conteúdo

Posts recomendados

Postado

Olá a todos do grupo!

Estou com um pequeno problema num código que eu estou fazendo, ele não faz contas cetas e apresenta problemas quando escolho a opção de divisão

#include <stdio.h>

int main(){
    int num1, num2, conta;
    char arit;
    printf("Digite um numero: \n");
    scanf("%d", &num1);
    printf("Digite outro numero: \n");
    scanf("%d", &num2);
    printf("Escolha uma operacao alritmetica (+, -, *, /): \n");
    scanf("%s", &arit);
    if(arit == '+'){
        conta = num1 + num2;
        printf("O resultado da operacao e %d", conta);
    }
    if(arit == '-'){
        conta = num1 - num2;
        printf("O resultado da operacao e %d", conta);
    }
    if(arit == '*'){
        conta = num1 * num2;
        printf("O resultado da operacao e %d", conta);
    }
    if(arit == '/'){
        conta = num1 / num2;
        printf("O resultado da operacao e %d", conta);
    }
}

 

Postado

Quando for usar o scanf, coloque um espaço em branco na máscara, para limpar o buffer antes de realizar a leitura:

scanf(" %d", &num);

E quando você ler um número, coloque %*c para ler o [ ENTER ] que ficou no buffer antes de passar para o próximo comando:

scanf(" %d%*c", &num);

O espaço em branco limpa o buffer antes de ler o número, já o %*c limpa depois de ler o número. Dessa forma você "limpa os pés" ao entrar e ao sair de casa. Eu dei o exemplo com números, mas pode ser feito para qualquer tipo de dados.

Postado
10 minutos atrás, AdrianoSiqueira disse:

Quando for usar o scanf, coloque um espaço em branco na máscara, para limpar o buffer antes de realizar a leitura:


scanf(" %d", &num);

E quando você ler um número, coloque %*c para ler o [ ENTER ] que ficou no buffer antes de passar para o próximo comando:


scanf(" %d%*c", &num);

O espaço em branco limpa o buffer antes de ler o número, já o %*c limpa depois de ler o número. Dessa forma você "limpa os pés" ao entrar e ao sair de casa. Eu dei o exemplo com números, mas pode ser feito para qualquer tipo de dados.

Mesma coisa

Postado

Eu particularmente não recomendo usar o %d, acho ele muito genérico. Se você vai ler int use %i, vai ler float use %f e assim por diante. Você errou ao ler a operação matemática usando %s, que deveria ser %c por ser um char.

 

É uma boa prática de programação inicializar todas as variáveis, isso previne possíveis erros causados por lixo de memória. Aplicando as correções e as dicas que eu dei no post acima, fica assim:

#include <stdio.h>

int main(){
    double num1 = 0.0;
    double num2 = 0.0;
    double conta = 0.0;

    char arit = ' ';

    printf("Digite um numero: ");
    scanf(" %lf%*c", &num1);

    printf("Digite outro numero: ");
    scanf(" %lf%*c", &num2);

    printf("Escolha uma operacao alritmetica (+, -, *, /): ");
    scanf(" %c%*c", &arit);

    if(arit == '+') {
        conta = num1 + num2;
        printf("O resultado da operacao e %.2f \n", conta);
    } else if(arit == '-') {
        conta = num1 - num2;
        printf("O resultado da operacao e %.2f \n", conta);
    } else if(arit == '*') {
        conta = num1 * num2;
        printf("O resultado da operacao e %.2f \n", conta);
    } else if(arit == '/') {
        if (num2 != 0) {
            conta = num1 / num2;
        } else {
            conta = 0.0;
        }
        printf("O resultado da operacao e %.2f \n", conta);
    }

    return 0;
}

 

adicionado 1 minuto depois

Esqueci de mencionar, que é bom usar float ou double em uma calculadora, para poder realizar operações de divisão. E falando em divisão, sempre verifique se o segundo número é diferente de 0 para evitar erros aritméticos (nada pode ser dividido por 0).

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!