Почему сложение выводит всегда 0? - PullRequest
0 голосов
/ 30 марта 2020
#include <iostream>
int getValueFromUser()
{
    std::cout << "Enter An Integer !" << '\n';
    int valueTyped{};
    std::cin >> valueTyped;
    return valueTyped;
}
void _double(int valueToBeMultiplied)
{
    std::cout << "Doubled Is :"<<'\n' << valueToBeMultiplied * 2 << '\n';
}
void add(int x, int y)
{
    std::cout << "=" << x + y;
}
int typeInteger(int x)
{
    std::cout << "Enter Your Number" << '\n' << '\n';
    std::cin >> x;
    return x;
}
int main()
{
    _double(getValueFromUser()); // Use the () double on the return value of the getValueFromUser()
    int a{}, b{};
    std::cout << "To Add Two Numbers :" <<'\n';
    typeInteger(a);
    typeInteger(b);
    add(a , b);
    return 0;
}

Умножение работает нормально, но сложение, независимо от того, какие числа я набираю, всегда печатает 0. Почему это происходит? И как я могу это исправить?

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

Определение typeInteger() не подходит для получения значения. После возврата из typeInteger() вы должны сохранить значение в переменных a,b. Пожалуйста, укажите это.

int getInputValue(){
    int x;
    std::cout << "Enter Your Number" << '\n' << '\n';
    std::cin >> x;
    return x;
}

a = getInputValue();
b = getInputValue();
add(a , b);
1 голос
/ 30 марта 2020

Вы предполагаете, что изменяя введенные вами переменные на typeInteger(), вы также изменяете a и b в main(). Это не правда.

Вы передаете эти переменные по значению. Если вы хотите, чтобы они были изменены, вы должны передать их либо по указателю, либо по ссылке.

Предполагаемое поведение будет достигнуто путем изменения int typeInteger(int x) на int typeInteger(int &x).

0 голосов
/ 30 марта 2020

Почему сложение выводит всегда 0?

Поскольку вы всегда передаете нули в качестве аргумента:

int a{}, b{}; // <-- zero initialisation
...
add(a , b);   // <-- zeroes passed here

Чтобы исправить это, передайте что-то отличное от нуля.

...