Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在C/C+中输入未知数量的数组值+;他有奇怪的行为_Arrays_C_Loops_While Loop_Scanf - Fatal编程技术网

Arrays 在C/C+中输入未知数量的数组值+;他有奇怪的行为

Arrays 在C/C+中输入未知数量的数组值+;他有奇怪的行为,arrays,c,loops,while-loop,scanf,Arrays,C,Loops,While Loop,Scanf,我需要用未知数量的元素填充整数数组。我使用while循环输入值,并在输入非整数值时退出循环。在循环外部,整数j被初始化为0,并用于寻址循环内部的数组元素。在循环的每一轮中,我检查输入值分配给数组元素v[j]前后j的值,然后j递增。 根据为声明中的数组选择的大小(在下面的示例v[8]),索引j意外地受到赋值本身的影响:在下面的示例中,当赋值前j等于11时,赋值后它变为2,然后将其全部搞乱。因此,代码无法为数组分配正确的输入值 我确实缺乏一些关于C/C++阵列管理的更深层次的知识。。。任何人都可以帮

我需要用未知数量的元素填充整数数组。我使用while循环输入值,并在输入非整数值时退出循环。在循环外部,整数j被初始化为0,并用于寻址循环内部的数组元素。在循环的每一轮中,我检查输入值分配给数组元素v[j]前后j的值,然后j递增。 根据为声明中的数组选择的大小(在下面的示例v[8]),索引j意外地受到赋值本身的影响:在下面的示例中,当赋值前j等于11时,赋值后它变为2,然后将其全部搞乱。因此,代码无法为数组分配正确的输入值

我确实缺乏一些关于C/C++阵列管理的更深层次的知识。。。任何人都可以帮助填补空白,解释我的代码明显奇怪的行为

#include <stdio.h>
int main()
{
    int j = 0, m, v[8];
    printf("Enter an integer: to finish enter x\n");
    while (scanf("%d", &m))
    {
        printf("j before assignment:%d - ", j);
        v[j] = m;
        printf("j after assignment:%d - ", j);
        printf("v[j] after assignment:%d\n", v[j]);
        j++;
    }
    return 0;
}
#包括
int main()
{
int j=0,m,v[8];
printf(“输入一个整数:要完成,请输入x\n”);
while(scanf(“%d”、&m))
{
printf(“分配前的j:%d-”,j);
v[j]=m;
printf(“分配后的j:%d-”,j);
printf(“赋值后的v[j:%d\n”,v[j]);
j++;
}
返回0;
}

您的写入超出了
v
的数组边界。要避免这种情况,请在for循环中选中
j
,例如,将
while(…)
替换为

for (j = 0; j < 8 && scanf("%d", &m) == 1; ++j) {
    // ...
}
for(j=0;j<8&&scanf(“%d”,&m)==1;++j){
// ...
}
这样,循环在到达数组末尾(
v[7]
)后停止


要评论“奇怪”行为,请阅读有关堆栈和堆栈布局的内容,例如



一如既往,检查和列出图书清单< /P>如果你使用C++,那么使用<代码> CIN < /代码>,使用<代码>矢量< /代码>,当数组只有8的大小时,你被分配给V(11)。你以为会发生什么?如果在数组边界之外赋值,则会得到未定义的行为。未定义的行为通常是奇怪的,试图理解它或多或少是毫无意义的。我不确定你对这个问题的期望是什么。请解释您的困惑所在。您在

v
数组之外编写代码,这会导致未定义的行为,在这种情况下很可能会覆盖一个或多个其他变量,因为编译器很可能会将您的所有变量放在彼此相邻的位置。这可能就是你在这里看到的。我确实缺乏一些关于C/C++阵列管理的更深入的知识:(当你标记你的问题时)或者,请选择一个。正如@克里斯姆所说的,实现C++所需的正确方式将与C++相比有很大的不同。如果你使用这种语言,请相应地更新你的问题。我需要的是一种动态填充数组的方法,让它在我进入新的值时增长:这是“不可能完成的任务”吗?我知道定义了一个有限大小的v之后,会有一些问题超过它,但是为什么变量j会受到这些问题的影响呢?它不是一个自变量吗?它的值在使用j++的每次循环中都会增加?