刚开始学习C ++

时间:2019-10-17 05:21:45

标签: c++

编写一个程序来帮助我计算总和。您的程序应提示我输入数字,直到完成为止(完成后,我将输入-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。我的代码有什么问题?我刚刚开始学习,感谢您的帮助。

5 个答案:

答案 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)

sumnumbertotal都未初始化。这意味着他们在开始时不一定有0

要解决此问题,只需将其设置为0

double sum = 0;
double number = 0;
double total = 0;

注意:我应该警告您,我不建议将浮点数/双精度数与-1之类的整数进行比较,因为it can behave unexpectedly通常是不建议的。但是,我认为您在这种情况下应该可以。但这不是保证。

答案 3 :(得分:0)

除了要初始化变量外,还有一些其他建议。

  • 我认为您不希望从结果中减去1。如果输入-1,它将被添加到total中,而while条件将是false,循环结束。因此,您的结果是错误的。

  • 您不需要totalsum

  • 使变量的范围尽可能小。 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,则会发生两件事:它使用该值计算新的总和(减一),而一会儿之后-},循环将退出并继续... 此注释和其他注释将使您的编程工作正常。