用C ++乘法并显示数组的值

时间:2019-04-01 23:57:32

标签: c++

我正在尝试完成一个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  

任何帮助或代码改进都将受到赞赏,因为找出如何乘法和显示乘后的值是完成练习所需要做的唯一事情。预先谢谢你!

4 个答案:

答案 0 :(得分:1)

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

1。命名约定。 不要将数组和临时for循环变量命名为同一对象。这将导致进一步的问题,我将举例说明。

2。运算符不正确 正如minterm所提到的,您正在使用比较运算符而不是等于运算符。但这不能解决您的问题。

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

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

答案 1 :(得分:0)

使用=代替==。当前,它仅评估逻辑语句,而不是将其设置为新值。 另外,您需要将for循环中的“ int array”更改为其他名称,以免将其与称为array的数组混淆。在for循环中调用其他变量,例如“ int i”。 因此,所讨论的行将不是“ array == multiplier * array”,而是“ int j = multiplier * array [i]”之类的东西,然后打印出j而不是array。

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

您正在进行的很多事情都是不正确的。

  

首先是您为array值设定的范围过大(也许不是正确的术语)。

您在for循环外声明了一个array值,并且在for循环内又在计数器中使用了值array。因此,您实际上并没有对阵列做任何事情。您实际上是在尝试对初始化变量进行操作。

  

第二个您使用==而不是=

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

  

arrayint[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++;

  

您正在尝试打印数组

由于arrayint [],因此在for循环中打印array只会为您提供数组所在的地址。应用乘数后,您将必须打印出每个索引或使用增强的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;
}