以C++为单位乘以并显示数组的值

Multiplying and displaying the values of an array in C++

本文关键字:数组 显示 C++ 为单位      更新时间:2023-10-16

我正在尝试完成一个C++练习,其中显示一个数组并提示用户输入乘数,这将导致显示的初始数字乘以用户的输入。这是我到目前为止的代码:

#include <iostream>
using namespace std;
int main()
{
int array[5] = { 1, 2, 3, 4, 5 };
for (const auto& a : array)
{
std::cout << a << std::endl;
}
double multiplier;
cout << "Input a multiplier: ";
cin >> multiplier;
for (int array = 1; array <= 5; ++array)
{
array == multiplier * array;
std::cout << array << std::endl;
}
}

当它运行时,它会打印正确的数组,在每个数组值后创建一个换行符,并提示用户输入乘数。但是,输入乘数时,值不会更改。下面是一个示例输出:

1
2
3
4
5
Input a multiplier: 2                                                                  
1                                                                                      
2                                                                                      
3                                                                                      
4                                                                                      
5  

目标是获得以下输出:

1
2
3
4
5
Input a multiplier: 2                                                                  
2                                                                                      
4                                                                                     
6                                                                                      
8                                                                                      
10  

任何帮助或代码改进将不胜感激,因为弄清楚如何乘法和显示乘法值是完成练习唯一需要做的事情。提前谢谢你!

您的代码存在三个大问题:

1. 命名约定。不要将数组和临时 for 循环变量命名为相同的东西。这将导致一个进一步的问题,我将对此进行说明。

2. 不正确的运算符 正如 minterm 所提到的,您使用的是比较运算符而不是相等运算符。但仅凭这一点并不能解决您的问题。

3. 不访问数组值 您实际上并没有将数组值与乘数相乘。您必须访问元素,这意味着您不能从 1 开始索引。

for (int i = 0; i < 5; i++){
array[i] *= multiplier
cout << array[i] << endl;
}

use = 而不是 ==。目前,它只是计算逻辑语句,而不是将其设置为新值。 此外,您需要将 for 循环中的"int array"更改为不同的名称,以免将其与称为 array 的数组混淆。将 for 循环中的变量称为其他内容,例如"int i"。 因此,有问题的行将不是"数组==乘数*数组",而是类似于"int j =乘数*数组[i]",然后让它打印出j而不是数组。

更简单的方法是使用另一个基于范围的 for 循环而不是索引版本:

for (auto& a : array)
{
a *= multiplier;
std::cout << a << std::endl;
}

如果你不需要更新数组本身(毕竟,你的代码实际上并没有再次从数组中读取),那么你的一个非常相似,但更直接的版本可能适用:

for (const auto& a : array)
{
std::cout << a * multiplier << std::endl;
}

你有很多事情是不正确的。

首先是你的过度范围(可能不是正确的术语)array值。

您在 for 循环外部声明了一个array值,并且您在计数器的 for 循环中再次使用该值array。因此,您实际上并没有对阵列执行任何操作。您实际上是在尝试对初始化变量执行某些操作。

其次,您使用的是 == 而不是 =

您使用的是比较运算符 (==) 而不是赋值运算符 (=),但还有其他很大的不行。

array是一个int[5]而不仅仅是一个int

要实际修改数组的每个元素,您需要通过说array[index]来引用索引,其中 index 是 0 到length of array - 1的值,所以在你的例子中是 4。

您正在使用double multiplier并尝试将其应用于int *

如果您尝试乘以双精度值(如 2.5),则数组值将是 int,而不是具有十进制值的数字。你应该把你的int array []变成一个double array []

不访问阵列,从索引 0 开始

遍历数组时,第一个索引始终为 0。您正在使用array = 1array <= 5。这将跳过您的第一个索引,并在最后为您提供一个越界索引。您应该改用int index = 0; index < 5; index++;

您正在尝试打印阵列

由于array是一个int []打印array在 for 循环中,这样只会给你数组所在位置的地址。您必须打印出每个索引,或者在应用乘数后使用增强的 for 循环方法。

如果您想使用上述实现,请执行此操作

for (int index = 0; index < 5; index++)
{
array[index] *= multiplier; // Or you can use array[index] = multiplier * array[index]
std::cout << array[index] << std::endl;
}