Не работает While

Программа должна высчитать сумму всех членов масива, но почему-то она выводит все время 0, через for программа работает, но мне нужно именно через while

#include <iostream>

using namespace std;

int main()
{
 int n;
 int i;
 int sum;

 cout << "n=";
 cin >> n;
 int arr[n];
 for (int i = 0; i < n; i++)
  {
   cout << "[" << i + 1 << "]" << ": ";
   cin >> arr[i];
  }
 cout << "\nMassiv: ";
 for (int i = 0; i < n; ++i)
  {
  cout << arr[i] << " ";
  }
  sum = 0;
 while ( i < n)
  {
    i++;
    sum = sum + arr[i];
  }
 cout << "\nsum =" << sum;
 cout << endl;
    return 0;
}

Xangra@96, (1) так писать нельзя:

 int n;

 cout << "n=";
 cin >> n;
 int arr[n];

Согласно стандарту C++, при определении массива в квадратных скобках должно быть константное выражение. То, что gcc пропускает такие вещи, не значит, что это правильно!

Используй либо объявление массива достаточно большого размера (в разумных пределах) с проверкой выхода за границу, либо динамическое выделение памяти под массив.

(2) Ты используешь неинициализированную переменную i. И инкремент не там. Так работает:

    sum = 0;
    i = 0;
    while (i < n)
    {
        sum = sum + arr[i];
        i++;
    }
    cout << "\nsum =" << sum;

а есть ли смысл объявлять переменную i в цикле for если мы ее в начале уже объявили?
int i;
...
for (int i = 0;...

Vangua, это разные переменные.

а есть ли смысл объявлять переменную i в цикле for если мы ее в начале уже объявили?
int i;
...
for (int i = 0;...

Переменная, объявляемая в цикле for, живёт только в теле цикла и экранирует одноименные переменные, существующие в охватывающих областях видимости.

Другой вопрос, что разные переменные имеют одинаковое имя. Стилистически это нехорошо: вносит путаницу.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.