Я столкнулся с проблемой. Я пытаюсь сохранить введенные пользователем значения в массив до тех пор, пока они не войдут в -1, используя цикл do-while. Вот пример моего кода:
int j=0;
do{
cin >> nodes[j];
j++;
}
while (nodes[j] != -1);
Может кто-нибудь сказать мне, почему это не работает и какой лучший подход будет? Благодарю!
Разве 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;
}
Это не работает, потому что у вас есть инкремент, завершающий индекс (j) после приема ввода и перед чтением ввода. Вместо этого вы можете сравнить узлы [j -1] == -1
Также важно, что вы можете перехватить ваш массив, если вы не ввели максимальное количество элементов.
Как отметил @Arun, j
уже увеличивается, когда отмечены nodes[j] != -1
.
Измените следующим образом:
do {
cin >> nodes[j];
} while (nodes[j++] != -1);
Утверждение while (nodes[j] != -1);
никогда не будет истинным, потому что вы увеличиваете j
и перемещаетесь по следующему индексу перед проверкой значения. Лучшим подходом было бы следующее:
do{
cin >> nodes[j];
}
while (j < SIZE && nodes[j++] != -1);
Вы увеличиваете 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++;
}
nodes[j]
не являются nodes[j]
вы вводите, так как это было ++
, попробуйте следующее: while(cin>>node[j++]);
t
j` уже при сравненииnodes[j] != -1
?