C ++: при вводе чисел в массив первое число равно 0 - PullRequest
1 голос
/ 05 апреля 2020

Попытка создать калькулятор, который вычисляет значения в массиве на основе ввода от пользователя. Но первое значение в массиве всегда равно 0, когда я оставляю p неопределенным, или p = 1 будет иметь ту же проблему. Это должно быть то, что пользователь вводит для первого значения и т. Д.

#include <iostream>
using namespace std;



int main() {

double x;
int p = 1, y = 0;
double sum = 1;
int many[p];
char op;

cout << "How many numbers are you working with today?" << endl;
cin >> x;

do
{
    if (y > x)
    break;

cout << "Enter number " << y + 1 << ":" << endl;
cin >> many[p];

cout << "What would you like the numbers to do: (+ - / *)" << endl;
cin >> op;


if (op == '+')
{
sum+=many[p];
cout << sum <<endl;
}

else if (op == '-')
{
sum-=many[p];
cout << sum <<endl;
}

else if (op == '*')
{
sum*=many[p];
cout << sum <<endl;
}

else if (op == '/')
{
sum/=many[p];
cout << sum <<endl;
}

else {cout << "ERROR: Enter correct value." << endl;}

    y++;

}

    while (y < x);
}

Сумма должна быть 3, а не 4.

How many numbers are you working with today?
2
Enter number 1:
1
What would you like the numbers to do: (+ - / *)
+
Enter number 2:
2
What would you like the numbers to do: (+ - / *)
+
4

Ответы [ 3 ]

3 голосов
/ 05 апреля 2020

Программа недопустима и имеет неопределенное поведение.

Для начинающих массив массивов переменной длины не является стандартной функцией C +

int p = 1, y = 0;
double sum = 1;
int many[p];

И в любом случае вы определили массив с одним элементом. Таким образом, единственный допустимый индекс для доступа к элементам массива - 0.

Даже в первом операторе, который использует массив

cin >> many[p];

, к нему обращаются за его пределами.

Вы должны использовать стандартный шаблон класса std::vector. Или, как на самом деле вы имеете дело с одним значением, тогда даже нет смысла использовать контейнер, Определите скалярный объект вместо массива.

0 голосов
/ 05 апреля 2020

Здесь есть много вещей, которые не имеют смысла.

  • Вы начинаете с sum = 1. Именно поэтому значение всегда + 1
  • many - это массив размера 1, который может быть изменен на одиночное целое число.
  • вы получаете доступ к many[p], который равен many[1], который находится за пределами. вы можете получить доступ только к many[0]

остальное я оставлю вам на поиск,

0 голосов
/ 05 апреля 2020

Начальное значение суммы равно 1, поэтому добавляется еще 1. Мы также не можем оставить его равным 0, потому что тогда он испортит регистры '*' и '/'. Я добавил начальное значение суммы для всех случаев. Кроме того, я бы предложил вам использовать переключатели вместо операторов if, else.

#include <iostream>
using namespace std;



int main() {

double x;
int p = 1, y = 0;
double sum = 1;
int many[p];
char op;

cout << "How many numbers are you working with today?" << endl;
cin >> x;

do
{
    if (y > x)
    break;

cout << "Enter number " << y + 1 << ":" << endl;
cin >> many[p];

cout << "What would you like the numbers to do: (+ - / *)" << endl;
cin >> op;

if (op == '+')
{
if (y == 0) {
  sum = 0;
}
sum+=many[p];
cout << sum <<endl;
}

else if (op == '-')
{
  if (y == 0) {
    sum = 0;
  }
  sum-=many[p];
  cout << sum <<endl;
}

else if (op == '*')
{
  if (y == 0) {
    sum = 1;
  }
  sum*=many[p];
  cout << sum <<endl;
}

else if (op == '/')
{
  if (y == 0) {
    sum = 1;
  }
  sum/=many[p];
  cout << sum <<endl;
}

else {cout << "ERROR: Enter correct value." << endl;}

    y++;

}

    while (y < x);
}
...