这是代码:
#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来获取数字。不确定我错过了什么。
答案 0 :(得分:3)
在您分配到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;
}
答案 1 :(得分:2)
此行应在您-module(maxMemCheck).
-export([fib/1,printfib/1]).
-export([main/0]).
printfib(N) ->
Res = maxMemCheck:fib(N),
io:fwrite("~w ~w~n", [N, Res]).
fib(0) -> 0 ;
fib(1) -> 1 ;
fib(N) when N > 0 -> fib(N-1) + fib(N-2) .
main () ->
spawn_opt(maxMemCheck,printfib,[10],[{max_heap_size,#{size => 300, kill => true, error_logger => true}}]).
之后移动到等式右侧的变量
{"init terminating in do_boot",{badarg,[{erlang,spawn_opt,[maxMemCheck,fib,"\n",[{max_heap_size,#{error_logger=>true,kill=>true,size=>300}}]],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
Crash dump is being written to: erl_crash.dump...done
init terminating in do_boot ()
稍后设置这些变量时,不会以某种方式重新计算变量。
答案 2 :(得分:2)
这部分
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;
内。
答案 3 :(得分:2)
您已经收到了一些答案,但我想提出另一种观点。
在我看来,你已经习惯了像Excel这样的程序,在那里你可以设置一个公式(就像其他3个单元格的产品一样),然后,每当你更改任何一个单元格时,产品就是立即更新,自动。 C ++(以及通常的编程语言)并不像那样工作。当你写一行像
int final_score = score_one * score_two * score_third;
您不设置规则,这将导致重新计算该值。方法不同!
程序从头到尾执行(实际上,从上到下),每次为变量赋值(如final_score
)时,你所做的就是阅读输入变量的当前值(这里是你的三个分数),计算结果(在这种情况下是未定义的,因为你没有初始化任何分数),并将它分配给变量,只是这个时间。而已。如果您稍后更改了分数,则 的更改将自动反映在final_score
上。如果要重新计算值,则必须手动执行。这就是为什么你必须在读取用户输入的行之后移动该行,正如其他人所说的那样。
答案 4 :(得分:0)
你真的不应该使用全局变量see here来解释为什么要避免它们。
接下来,而不是做using std::cin
等。只需习惯输入它。
最后,在编译器中使用适当的标志来帮助您捕获错误。编译器是你的朋友。一个好的编译器会告诉你,
int score_one;
int score_two;
int score_third;
int final_score = score_one + score_two + score+third / 3;
未初始化。要真正实现您的想法,您可以使用一个返回double的函数。这看起来像
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;
}
你走在正确的轨道上,你只需要查看你的代码并直接读给自己。你可以在编程中做的最好的事情之一是从顶部开始并说:“好吧,这会破坏哪里?”并逐行理解它。