Попытка заполнить массив пользовательским вводом

0

Я столкнулся с проблемой. Я пытаюсь сохранить введенные пользователем значения в массив до тех пор, пока они не войдут в -1, используя цикл do-while. Вот пример моего кода:

int j=0;
    do{
        cin >> nodes[j];
        j++;
    }
    while (nodes[j] != -1);

Может кто-нибудь сказать мне, почему это не работает и какой лучший подход будет? Благодарю!

  • 1
    Не увеличивается ли t j` уже при сравнении nodes[j] != -1 ?
Теги:

6 ответов

2

Разве j не увеличивается, когда nodes[j] != -1 сравнения nodes[j] != -1?

Кроме того, я полагаю, что мы не хотим хранить значение дозорного -1 в массиве.

for( int j = 0; j != NodeMax; ++j) {
    int tmp = 0;
    cin >> tmp;
    if( tmp == -1 ) {
        break;
    }
    node[ j ] = tmp;
}
2

Это не работает, потому что у вас есть инкремент, завершающий индекс (j) после приема ввода и перед чтением ввода. Вместо этого вы можете сравнить узлы [j -1] == -1

Также важно, что вы можете перехватить ваш массив, если вы не ввели максимальное количество элементов.

  • 0
    Спасибо! У меня есть максимальное количество элементов для этого массива ранее в моей функции, так что не беспокойтесь! T
  • 0
    Вам нужно прервать цикл при достижении этого максимума, даже если -1 не было предоставлено ... Это легко сделать, завершив -1 || J == Макс
1

Как отметил @Arun, j уже увеличивается, когда отмечены nodes[j] != -1.

Измените следующим образом:

do {
    cin >> nodes[j];
} while (nodes[j++] != -1);
1

Утверждение while (nodes[j] != -1); никогда не будет истинным, потому что вы увеличиваете j и перемещаетесь по следующему индексу перед проверкой значения. Лучшим подходом было бы следующее:

do{
    cin >> nodes[j];
}
while (j < SIZE && nodes[j++] != -1);
  • 0
    Теперь j увеличивается в два раза за один цикл!
  • 0
    @kalkin Ой, исправлено
0

Вы увеличиваете j до проверки узла [j]! = -1. Либо сделайте это

int j=-1;
    do{
        j++;
        cin >> nodes[j];

    }
    while (nodes[j] != -1);

или

int j=0;
        do{

            cin >> nodes[j];

        }
        while (nodes[j++] != -1);

или

int j=0;
while(cin>>nodes[j] && nodes[j]!=-1)
{
     j++;
}
0

nodes[j] не являются nodes[j] вы вводите, так как это было ++, попробуйте следующее: while(cin>>node[j++]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню