Проблемы с циклами и массивами

#c #arrays #loops

#c #массивы #циклы

Вопрос:

Я выполнил этот простой цикл, но он не работает, знаете почему?

 #include <iostream>
using namespace std;
int main()
{
    int array[100], i=0;
do {
        cout<<i<<".";
        cin >> array[i];
        i  ;
    }while(array[i] <= 30);
    return 0;
}
  

Вывод:
0.23
1.26
2.27
3.29
4.11
5.17
6.28
7.31
8.17
9.19
10.76
11.54
12.31

Даже если я вставляю число больше 30, цикл продолжается.

Комментарии:

1. Для эффективной помощи вам необходима чрезвычайно важная информация: что должен был делать цикл?

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

3. Не работает , по крайней мере, очень расплывчатое описание symproms.

4. Сядьте и обсудите логику цикла со своей Резиновой уткой . Сосредоточьте разговор на том, стоит ли читать содержимое array[i] перед сохранением значения array[i] .

5. Новая ошибка вызвана i ; тем, что из-за этого утверждения индекс i в array[i] <= 30 равен 1 после последнего прочитанного элемента.

Ответ №1:

Я думаю, ваш цикл должен выглядеть так for(int i=0;i<=30;i ) , чтобы выполняться 31 раз. Во время входа в цикл array[i] содержит значение, зависящее от того, что было выделено в стеке ранее!

Комментарии:

1. Вы выделяете важную ошибку, и вы, вероятно, правы, но лучше воздержаться от ответа до тех пор, пока спрашивающий не прояснит свои цели. Дополнительная информация может сделать этот ответ неправильным. Обычно правило «не изменять вопрос с правильным ответом» защищает ответ, но на данный момент мы не можем быть уверены, что он правильный.

2. @AndreasWenzel верно, обновлено, чтобы сделать его менее волшебным.