Почему не работает арифметика переменных? - PullRequest
0 голосов
/ 30 мая 2018

Вот код:

#include<iostream>  
#include<string>

using std::cout;
using std::cin;
using std::endl;
using std::string;

int score_one;
int score_two;
int score_third;
int final_score = score_one * score_two * score_third;

int main()
{

cout << "What was your first score?" << endl;
cin >> score_one;

cout << "What was your second score?" << endl;
cin >> score_two;

cout << "What was your third score?" << endl;
cin >> score_third;

cout << "Your average score is: " << final_score << endl;

return 0;

}

Первоначально я пытаюсь получить среднее значение, разделив три балла, но это не работает, ни моя арифметика.Он даже не кратен переменным.Я использую Cin, чтобы получить числа.Не уверен, что мне не хватает.

Ответы [ 5 ]

0 голосов
/ 30 мая 2018

Вы действительно не должны использовать глобальные переменные, см. Здесь о том, почему вы должны избегать их.

Далее, вместо того, чтобы делать using std::cin и т. Д. Просто привыкните набирать его.

Наконец, используйте соответствующие флаги в вашем компиляторе, чтобы помочь вам ловить ошибки.Компилятор предназначен для вашего друга.Хороший компилятор скажет вам:

int score_one;
int score_two;
int score_third;
int final_score = score_one + score_two + score+third / 3;

Не инициализирован.Чтобы действительно достичь того, о чем вы думаете, вы можете использовать функцию, которая будет возвращать двойное число.И это будет выглядеть примерно так:

double doAverage(int score1, int score2, int score3)
{
    return (score1 + score2 + score3) / 3.0;
}

Но это, вероятно, произойдет позже в вашей практике кодирования.

#include<iostream>  


int main()
{
    // Delare your variables here and initialize them to zero.
    int score_one = 0;
    int score_two = 0;
    int score_third = 0;
    double final_score = 0;

    std::cout << "What was your first score?" << std::endl;
    std::cin >> score_one;

    std::cout << "What was your second score?" << std::endl;
    std::cin >> score_two;

    std::cout << "What was your third score?" << std::endl;
    std::cin >> score_third;

    // Take all scores and divide it. This is the important part since
    // order matters in your code.
    final_score = (score_one + score_two + score_third) / 3.0;

    std::cout << "Your average score is: " << final_score << std::endl;

    return 0;

}

Вы на правильном пути, вам просто нужно посмотреть на своикод и прочитайте это вслух себе.Одна из лучших вещей, которую вы можете сделать в программировании, - это начинать с вершины и говорить: «Хорошо, где это сломается?»И следуйте за ней построчно, придавая этому смысл.

0 голосов
/ 30 мая 2018

Вы уже получили некоторые ответы, но я хотел бы предложить другую точку зрения.

Мне кажется, что вы привыкли к такой программе, как Excel, где вы можете установить ячейку в формулу(как и продукт из 3 других ячеек), а затем, когда вы меняете любую из этих ячеек, продукт немедленно обновляется автоматически.C ++ (и вообще языки программирования) не работает таким образом.Когда вы пишете строку типа

int final_score = score_one * score_two * score_third;

, вы не устанавливаете правило, которое приведет к пересчету значения.Подход другой!

Программа выполняется от начала до конца (на практике сверху вниз), и каждый раз, когда вы присваиваете значение переменной (например, final_score),то, что вы делаете, читает текущее значение входных переменных (здесь ваши три оценки), вычисляет результат (который в этом случае не определен, потому что вы не инициализировали ни одного из результатов) и присваиваете его переменной как раз на этот раз .Вот и все.Если вы позже измените счет, это изменение будет не автоматически отражаться на вашем final_score.Если вы хотите, чтобы значение было пересчитано, вы должны сделать это вручную.Вот почему вы должны переместить эту строку после строк, которые читают ввод от пользователя, как сказали другие.

0 голосов
/ 30 мая 2018

Эта строка должна быть перемещена после you cin в переменные в правой части уравнения

int final_score = score_one * score_two * score_third;
cout << "Your average score is: " << final_score << endl;

Переменная не каким-то образом пересчитывается, когда эти переменныепозже установлено.

0 голосов
/ 30 мая 2018

Эта часть

int final_score = score_one * score_two * score_third;

должна быть внутри main() после последней cin.

0 голосов
/ 30 мая 2018

В то время, когда вы присваиваете final_score, значения других баллов равны 0 (так как вы еще не присвоили их, и они являются глобальными).Затем вы читаете в оценки, но никогда не обновляете final_score!

Вы должны добавить это после прочтения в третьем счете:

final_score = score_one * score_two * score_third;

Это обновит final_score.


Я бы также предложил держаться подальше от глобальных переменных.Я бы также предложил инициализировать ваши переменные, когда вы объявляете их, чтобы избежать значений мусора.

Кроме того, вы фактически не вычисляете среднее значение!Для этого вам нужно добавить свои значения и разделить на 3, так как у вас всего 3 значения.Но вы объявили final_score как целое число, поэтому вы не сможете хранить среднее значение с полной точностью.Я бы предложил объявить double.

. Учитывая все эти изменения, ваш код будет выглядеть так:

int main()
{
    int score_one = 0;
    int score_two = 0;
    int score_third = 0;
    double final_score = 0;

    cout << "What was your first score?" << endl;
    cin >> score_one;

    cout << "What was your second score?" << endl;
    cin >> score_two;

    cout << "What was your third score?" << endl;
    cin >> score_third;

    final_score = (score_one + score_two + score_third) / static_cast<double>(3);

    cout << "Your average score is: " << final_score << endl;

    return 0;
}
...