为什么变量算术不起作用?

Why isn't the variables arithmetic working?

本文关键字:不起作用 变量 为什么      更新时间:2023-10-16

这是代码:

#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 来获取数字。不知道我错过了什么。

在您分配给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;
}

cin方程右侧的变量,应移动此行

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

稍后设置这些变量时,不会以某种方式重新计算变量。

这部分

int final_score = score_one * score_two * score_third;

应该在最后一次cinmain()内.

你已经收到了一些答案,但我想提供另一种观点。

在我看来,您已经习惯了像Excel这样的程序,您可以在其中将单元格设置为公式(例如其他3个单元格的乘积(,然后,每当您更改任何这些单元格时,产品都会立即自动更新。C++(以及通常的编程语言(不是这样工作的。当你写一行像

int final_score = score_one * score_two * score_third;

没有设置规则,这将导致重新计算值。方法不同!

程序从头到尾(在实践中,从上到下(执行,每次为变量赋值(如final_score(,您正在做的是读取输入变量的当前值(这里是您的三个分数(,计算结果(在这种情况下是未定义的, 因为你还没有初始化任何分数(,并将其分配给变量,只是这次。就是这样。如果您稍后更改分数,更改将不会自动反映在您的final_score上。如果要重新计算值,则必须手动计算。这就是为什么你必须在读取用户输入的行之后移动该行,正如其他人所说。

你真的不应该使用全局变量,请参阅这里,了解为什么你应该避免它们。

接下来,而不是做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;
}

你走在正确的轨道上,你只需要看看你的代码并大声朗读给自己听。在编程中,你能做的最好的事情之一就是从顶部开始,然后说,"好吧,这在哪里中断?并逐行遵循它以理解它。