【发布时间】:2022-08-16 22:06:53
【问题描述】:
此 C 代码用于删除数组中所有出现的整数。但是,当我执行它时,显示最终数组时出现问题,一旦找到第一次出现,代码就不会显示数组的其余部分。
unsigned int T[10], n, i, j, exist, integerDeleteOccurences;
printf(\"Array length : \");
scanf(\"%u\", &n);
for(i=0; i<n; i++)
{
printf(\"%u | \", T[i]);
}
printf(\"The number you want to delete its occurences : \");
scanf(\"%u\", &integerDeleteOccurences);
exist = 0;
for (i=0; i<n; i++)
{
if (T[i] == integerDeleteOccurences)
{
j = i;
for (j=i; j<n-1; j++);
{
T[j] = T[j+1];
}
exist = 1;
i--;
n--;
}
}
if (exist == 1)
{
for (i=0; i<n; i++)
{
printf(\"%u | \", T[i]);
}
}
else if (exist == 0)
{
printf(\"This number doesn\'t exist in the array ! \\n\");
}
-
您没有提供完整的代码,并且您从未显示的流中获取输入。在被省略的细节中存在很多未定义行为的可能性,因此几乎不可能提供一个合理的答案。减少您的代码,使其完整并显示使用的实际数据。
-
在您显示的代码中,
T未初始化,因此当您尝试将T[0]传递给 printf 时,您有未定义的行为,无论是否尝试在条件下使用n的潜在未设置值for 循环被定义为行为。 -
n需要小于10,为什么不考虑动态分配数组呢? -
顺便说一句,for 循环中的无符号变量
ij通常是有风险的。