刚开始学习C++

Just started learning C++

本文关键字:C++ 学习 刚开始      更新时间:2023-10-16

>编写一个程序来帮助我计算总和。您的程序应该提示我输入数字,直到我完成(完成后,我将输入 -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。我会让双倍总计 =2;它可以工作,但并不真正理解为什么它输出 25。我的代码出了什么问题?我刚开始学习感谢帮助。

>C++不会自动将声明的变量初始化为零,并且由于变量只是内存位置上的标签,因此您可以获得恰好存储在该位置的任何位的数值转换作为事实上的初始化。所以养成总是初始化变量的习惯:

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

请注意,这实际上只是您的总变量的问题,因为其他变量在用于操作之前都是赋值(通过 cin 和赋值运算符 =(。(编辑:错过了使用数字的while循环!请参阅评论(在声明时初始化仍然(总是(是一个好主意。

C++中缺少的是初始化。

如果在初始化变量之前使用它,则程序将具有未定义的行为。从那里开始,任何事情都可能发生。

您可以简单地解决它,

例如
double sum = 0;

请记住对所有变量执行此操作。

你也不需要这一行:

sum = total + number;

total已经是sum了.

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

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

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

注意:我应该警告您,我不建议将浮点/双精度与像-1这样的整数进行比较作为一般规则,因为它可能会发生意外行为。但是,我认为在这种情况下您应该没问题。但这不是保证。

除此之外,还有几句话,你应该初始化你的变量。

  • 我认为您不喜欢从结果中减去 1。如果输入-1它将被添加到total,然后 while 条件将被false并且循环结束。因此,你的结果是错误的。

  • 你不需要totalsum.

  • 使变量的范围尽可能小。number只需要循环体作为作用域。

  • 不要使用using namespace std

  • 代码的格式很重要。我总是使用诸如 clang 格式之类的工具。

这是我对您的代码的重构:

#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;
}

如果输入 -1,则会发生两件事:它使用该值来计算新的总和(减去 1(,并且在 while - } 之后,循环将退出并继续...... 此注释和其他注释将使您的程序正常工作。