Calculator does not print the correct value

Asked

Viewed 109 times

2

Hi, I’m coming back to the C language after a while. I’ve always used Code :: Blocks, but now, I migrated to Vscode. When I try to print values, giant numbers come out, for example: n°1 = 15 and n°2 = 5. When I print out, a number like: 15674213 comes out. Sorry if the text came out weird. It’s my first time here!

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

int main(){
    //Variaveis
    int num1, num2, soma, subtracao, multiplicacao, divisao;


            soma                   = num1 + num2;
            subtracao              = num1 - num2;
            multiplicacao          = num1 * num2;
            divisao                = num1 / num2;


    //Mensagens
    printf("CALCULADORA 0.1\n");
    printf("A nossa calculadora, realiza calculos com apenas dois números.\n");

    //Coletar primeiro numero
    printf("Digite o primeiro número:");
    scanf("%i", &num1);

    //Coletar segundo numero
    printf("Digite o segundo número:");
    scanf("%i", &num2);

    //Imprimir resultados
    printf("Valor da soma: %i\n", soma);
    printf("Valor da subtração: %i\n", subtracao);
    printf("Valor da multiplicação: %i\n",multiplicacao);
    printf("Valor da divisão: %i\n", divisao);

    //Manter execucao
    return 0;
}
  • 2

    If this is the order of the commands in your code then the problem is that you are doing the operations before to read the values to be used in such operations.

  • If you are using gcc use the -Wall option, and then show that these variables were used without initializing.

  • Thank you! You helped a lot here!

3 answers

2

You are performing operations with values that should come from the keyboard, but have not yet been read. When you declare a variable and use it without initializing it, the value in it is unknown (known as "memory junk"), for this reason, large numbers were being displayed. Therefore, to solve the problem, you must first read the values and only then perform operations with them, as below:

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

int main(){
  //Variaveis
  int num1, num2, soma, subtracao, multiplicacao, divisao;

  //Mensagens
  printf("CALCULADORA 0.1\n");
  printf("A nossa calculadora, realiza calculos com apenas dois números.\n");

  //Coletar primeiro numero
  printf("Digite o primeiro número:");
  scanf("%i", &num1);

  //Coletar segundo numero
  printf("Digite o segundo número:");
  scanf("%i", &num2);


  //realizar as operações (AQUI OS VALORES JÁ FORAM LIDOS, PORTANTO SÃO CONHECIDOS)
  soma                   = num1 + num2;
  subtracao              = num1 - num2;
  multiplicacao          = num1 * num2;
  divisao                = num1 / num2;

  //Imprimir resultados
  printf("Valor da soma: %i\n", soma);
  printf("Valor da subtração: %i\n", subtracao);
  printf("Valor da multiplicação: %i\n",multiplicacao);
  printf("Valor da divisão: %i\n", divisao);

  //Manter execucao
  return 0;
}
  • 1

    In addition, it is important to note that it would be more appropriate, unless you want to perform operations on different bases, to use %d instead of %i in the scanf, because %i interprets hexadecimal(0x) and octal(0).

  • Thank you! You helped me so much!!!

  • @Peter, yes, there’s that too.

0

Hello,

refiz replacing printf/scanf with Cout/Cin, both work the same way.

#include <iostream>//biblioteca eliminar duplicidades
#include <math.h>//biblioteca operações matemáticas
#include <stdio.h>//biblioteca funções entrada e saída
#include <locale.h>//biblioteca de acentuação

using namespace std;//standard()padrão 

int main()//início
{
//Variáveis
    float n1, n2, soma, subt, divi, multi;

//Mensagens
    cout<<"CALCULADORA 0.1\n";
    cout<<"A nossa calculadora, realiza calculos com apenas dois números.\n";

//Coletar primeiro numero
    cout<<"Digite o primeiro número: ";
        cin>>n1;

//Coletar segundo numero
    cout<<"Digite o segundo número: ";
        cin>>n2;

//Especificando Operações
            soma=(n1+n2);
            subt=(n1-n2);
            divi=(n1/n2);
            multi=(n1*n2);

//Imprimir resultados
    cout<<"\nO resultado da soma de "<<n1<<" + "<<n2<<" é = "<<soma;
    cout<<"\nO resultado da subtração de "<<n1<<" - "<<n2<<" é = "<<subt;
    cout<<"\nO resultado da divisão de "<<n1<<" / por "<<n2<<" é = "<<divi;
    cout<<"\nO resultado da multiplicação de "<<n1<<" multiplicado por "<<n2<<" é = "<<multi;

    return 0;//finaliza e retorna zero//fim algoritmo.`insira o código aqui`
}

0

C does not initialize its variables, so a variable declared without an initial value will have a value that is already present in the memory, known as "garbage" value. Because of this your variables are with these "strange" values, this is a behavior of the language and has nothing to do with your text editor.

Another thing is that you are doing the calculations before reading the values provided by the user.

If you are compiling your code with gcc or Clang use these flags: -Wall -Wextra -Werror. Using these flags will enable compiler warnings and treat them as errors.


It is not necessary to create a variable to store a value that you will only use once. These variables sum, subtraction, multiplication and division can be replaced by expressions in the statement itself, making your code cleaner.


If you only want to work with decimal numbers use scanf with %d and not with %i.

In short, your code could be written that way:

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

int main(){
    //Variaveis
    int num1 = 0, num2 = 0;

    //Mensagens
    printf("CALCULADORA 0.1\n");
    printf("A nossa calculadora, realiza calculos com apenas dois números.\n");

    //Coletar primeiro numero
    printf("Digite o primeiro número:");
    scanf("%d", &num1);

    //Coletar segundo numero
    printf("Digite o segundo número:");
    scanf("%d", &num2);

    //Imprimir resultados
    printf("Valor da soma: %i\n", (num1 + num2));
    printf("Valor da subtração: %i\n", (num1 - num2));
    printf("Valor da multiplicação: %i\n", (num1 * num2));
    printf("Valor da divisão: %i\n", (num1 / num2));

    //Manter execucao
    return 0;
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.