#c
#c
Вопрос:
Я пытаюсь выполнить упражнение на C , в котором отображается массив, и пользователю предлагается ввести множитель, в результате чего отображаемые исходные числа будут умножены на введенные пользователем. Вот код, который у меня есть на данный момент:
#include <iostream>
using namespace std;
int main()
{
int array[5] = { 1, 2, 3, 4, 5 };
for (const autoamp; 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. Вау, это действительно компилируется с двумя разными
array
переменными? В любом случае, это довольно сбивает с толку читателя, когда он это видит. Возможно, эта вторая переменная могла бы бытьarrayIndex
или что-то в этомроде.2. @KenWayneVanderLinde использует разные области. Обучаемый, осторожнее с тем, что вы здесь делаете. Вероятно, это не то, что вы хотите.
Ответ №1:
В вашем коде есть три большие проблемы:
1. Соглашения об именовании.Не называйте свой массив и временную переменную цикла for одним и тем же именем. Это вызовет проблему в дальнейшем, которую я проиллюстрирую.
2. Неверный оператор Как упоминал minterm, вы используете оператор сравнения вместо оператора равенства. Но это само по себе не решит вашу проблему.
3. Отсутствие доступа к значениям массива На самом деле вы не умножаете значения массива на множитель. Вам необходимо получить доступ к элементам, что означает, что вы не можете начать индекс с 1.
for (int i = 0; i < 5; i ){
array[i] *= multiplier
cout << array[i] << endl;
}
Ответ №2:
Используйте = вместо ==. В настоящее время он просто вычисляет логический оператор вместо того, чтобы присваивать ему новое значение. Кроме того, вам нужно изменить «int array» в цикле for на другое имя, чтобы не путать его с массивом, называемым array. Вызовите переменную в цикле for как-нибудь иначе, например «int i». Таким образом, тогда рассматриваемая строка была бы не «array == multiplier * array», а вместо этого что-то вроде «int j = multiplier * array[i]», а затем распечатайте j вместо array .
Ответ №3:
Более простым подходом было бы использовать другой цикл for на основе диапазона вместо индексированной версии:
for (autoamp; a : array)
{
a *= multiplier;
std::cout << a << std::endl;
}
Если вам не нужно обновлять сам массив (в конце концов, ваш код фактически не считывается из массива повторно), тогда вам может подойти очень похожая, хотя и более простая версия:
for (const autoamp; a : array)
{
std::cout << a * multiplier << std::endl;
}
Ответ №4:
У вас происходит довольно много неправильных действий.
Во-первых, вы переоцениваете (возможно, это неправильный термин)
array
значение.
У вас есть array
значение, объявленное вне вашего цикла for, и вы снова используете это значение array
внутри цикла for для счетчика. Таким образом, вы на самом деле ничего не делаете со своим массивом. На самом деле вы пытаетесь что-то сделать с переменной инициализации.
Во-вторых, вы используете == вместо =
Вы используете оператор сравнения (==) вместо оператора присваивания (=), но есть и другие серьезные проблемы.
array
являетсяint[5]
не простоint
Чтобы фактически изменить каждый элемент вашего массива, вам нужно сослаться на индекс, указав, array[index]
где индекс — это значение от 0 до length of array - 1
, поэтому в вашем случае 4.
Вы используете
double multiplier
и пытаетесь применить его кint *
Если вы попытаетесь умножить на двойное значение, например 2.5, значения вашего массива будут целыми, а не числом с десятичным значением. Вы должны превратить свой int array []
в double array []
Нет доступа к вашему массиву, начиная с индекса 0
При циклическом просмотре массива первый индекс всегда равен 0. Вы используете array = 1
и array <= 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;
}