C语言 为什么循环中的值永远不会大于 2



我在下面有循环,unique的值永远不会大于2n是数组中整数的总数(我逐行从文件中读取整数)。

我完全被难住了,已经很久了。为什么unique的值永远不会大于2

int last = array[0];
int unique = 1;
int i;
for (i = 1; i < n; i++) {
    if (array[n] != last) {
        last = array[n];
        unique++;
        printf("i:%dn", i);
        printf("n:%dn", n);
        printf("last:%dn:", last);
    }
}
printf("unique:%dn", unique);

输出:

 i:1
n:9
last:0
:unique:2
 i:1
n:4
last:4
:unique:2
 i:1
n:5
last:4
:unique:2
 i:1
n:5
last:4
:unique:2
 i:1
n:5
last:4
:unique:2
 unique:1
 i:1
n:20
last:0
:unique:2

你输入了错误的数组索引:使用 array[i] 而不是 array[n]

这是一个更简单的版本:

int unique;
for (unique = 1; unique < n && array[unique] == array[unique - 1]; unique++) {
    continue;
}
printf("unique:%dn", unique);

由于您永远不会修改 n,因此循环中会发生以下情况:

if (array[n] != last ) {
    last = array[n];

在第一次迭代中,最后一个被分配了 array[n],并且保持这种状态。因此,稍后 if 条件始终为假。

你能解释一下你是如何读取整数的吗?您的 OUTPUT 是使用不同的整数集多次运行代码的结果吗?

 if (array[n] != last) {

如果 array 的大小为 n,那么像在 if 语句中那样访问array[n]是危险的,因为可以通过 array[0]array[1]、...、array[n-1] 访问 n 大小的数组。你的意思是测试array[i]吗?

last = array[n];

与上述相同的问题。

您的n正在更改循环的每次迭代,我认为这是无意的。

uniqueprintf在 for 循环之外。

最新更新