我遇到了一个问题。我正在尝试将用户输入的值存储到数组中,直到它们使用do-while循环输入-1。以下是我的代码示例:
int j=0;
do{
cin >> nodes[j];
j++;
}
while (nodes[j] != -1);
有人可以告诉我为什么这不起作用以及更好的方法是什么?谢谢!
答案 0 :(得分:2)
它不起作用,因为您在接收输入之后和读取输入之前递增结束索引(j)。您可以改为比较节点[j-1] == -1
同样重要的是,如果没有放入最大数量的元素,可能会超出数组。
答案 1 :(得分:2)
当比较j
时,nodes[j] != -1
已经增加了吗?
另外,我认为,我们不希望将 sentinel 值-1
存储到数组中。
for( int j = 0; j != NodeMax; ++j) {
int tmp = 0;
cin >> tmp;
if( tmp == -1 ) {
break;
}
node[ j ] = tmp;
}
答案 2 :(得分:1)
正如@Arun所说,j
在检查nodes[j] != -1
时已经增加。
修改如下:
do {
cin >> nodes[j];
} while (nodes[j++] != -1);
答案 3 :(得分:1)
语句while (nodes[j] != -1);
将永远不会成立,因为您在检查值之前递增j
并继续下一个索引。更好的方法是:
do{
cin >> nodes[j];
}
while (j < SIZE && nodes[j++] != -1);
答案 4 :(得分:0)
nodes[j]
不是您输入的nodes[j]
++
,
试试这个:
while(cin>>node[j++]);
答案 5 :(得分:0)
在节点[j]!= - 1检查之前,您正在递增j。 要么这样做
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++;
}