编写一个程序来帮助我计算总和。您的程序应提示我输入数字,直到完成为止(完成后,我将输入-1)。然后您的程序应打印出总和。
#include<iostream>
using namespace std;
int main()
{
double sum;
double number;
double total;
while (number !=-1)
{
cout<<"Input numbers: "<<endl;
cin>>number;
total+=number;
}
sum = total + number;
cout<<"The sum is "<<sum<<endl;
return 0;
}
例如,我输入9和9,然后输入-1,我得到25。我是否将double total设为= 2;它可以工作,但不真正理解为什么会输出25。我的代码有什么问题?我刚刚开始学习,感谢您的帮助。
答案 0 :(得分:4)
C ++不会自动将声明的变量初始化为零,并且由于变量只是内存位置上的标签,因此,您可以对实际存储在该位置的任何位进行数值转换,以进行实际的初始化。因此养成始终初始化变量的习惯:
double sum = 0;
double total = 0;
double number = 0;
请注意,这实际上仅是总变量的问题,因为其他变量在操作中使用之前都已分配了值(通过cin和=,即赋值运算符)。 (编辑:错过了使用数字的while循环!请参见注释)在声明时进行初始化仍然是(始终)一个好主意。
答案 1 :(得分:2)
在C ++中缺少的是初始化。
如果在初始化变量之前使用了变量,则程序将具有undefined behavior。从那里可能发生任何事情。
您可以简单地通过例如
解决它double sum = 0;
请记住对所有变量都这样做。
您也不需要此行:
sum = total + number;
total
已经是sum
。
答案 2 :(得分:2)
sum
,number
和total
都未初始化。这意味着他们在开始时不一定有0
。
要解决此问题,只需将其设置为0
:
double sum = 0;
double number = 0;
double total = 0;
注意:我应该警告您,我不建议将浮点数/双精度数与-1
之类的整数进行比较,因为it can behave unexpectedly通常是不建议的。但是,我认为您在这种情况下应该可以。但这不是保证。
答案 3 :(得分:0)
除了要初始化变量外,还有一些其他建议。
我认为您不希望从结果中减去1。如果输入-1
,它将被添加到total
中,而while条件将是false
,循环结束。因此,您的结果是错误的。
您不需要total
和sum
。
使变量的范围尽可能小。 number
仅需要将循环主体作为作用域。
请勿使用using namespace std
。
格式化代码很重要。我总是使用像clang-format这样的工具。
这是我对您的代码的重构:
#include <iostream>
int main() {
double sum = 0;
while (true) {
std::cout << "Input numbers: " << std::endl;
double number = 0;
std::cin >> number;
if (number == -1) {
break;
}
sum += number;
}
std::cout << "The sum is " << sum << std::endl;
return 0;
}
答案 4 :(得分:-1)
如果输入-1,则会发生两件事:它使用该值计算新的总和(减一),而一会儿之后-},循环将退出并继续... 此注释和其他注释将使您的编程工作正常。