尝试使用用户输入填充数组

时间:2014-04-03 01:45:31

标签: c++

我遇到了一个问题。我正在尝试将用户输入的值存储到数组中,直到它们使用do-while循环输入-1。以下是我的代码示例:

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

有人可以告诉我为什么这不起作用以及更好的方法是什么?谢谢!

6 个答案:

答案 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++;
}