为什么变量算术不起作用?
Why isn't the variables arithmetic working?
这是代码:
#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;
应该在最后一次cin
后main()
内.
你已经收到了一些答案,但我想提供另一种观点。
在我看来,您已经习惯了像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;
}
你走在正确的轨道上,你只需要看看你的代码并大声朗读给自己听。在编程中,你能做的最好的事情之一就是从顶部开始,然后说,"好吧,这在哪里中断?并逐行遵循它以理解它。
- 通过 get-Method 访问变量在类外不起作用
- 键盘不起作用 - Arduino Uno - 与变量有关的多个错误
- (C++)虽然循环一次不起作用,但我引入了多个变量
- 指针变量在 cout 函数中不起作用
- C++结构模板变量快捷方式定义不起作用
- C++ 互斥锁可以交叉方法/变量吗?如果是这样,为什么在这里不起作用?
- 变量和常数的C++划分不起作用
- C++ Eclipse:二叉搜索树节点>数据=变量似乎不起作用
- swap(int&, int&) 函数不起作用,当交换不使用临时变量时?
- 为什么变量算术不起作用?
- 为什么这个条件变量不起作用
- 在循环中更改数组的变量不起作用
- 使用模量来找出数字是否可以除去不起作用的变量
- 添加到私人变量不起作用
- 更改生成文件中变量的值不起作用
- 需要使用 Book* 头变量重载运算符,但不起作用
- SFINAE:检测成员变量的存在在 g++ 上不起作用
- 全球向量变量上的外部不起作用
- 我无法正确获取这些变量声明...为什么这些参数不起作用?我只是将 n 值设置为数组长度
- 全球变量不起作用Raspberry Pi