我在下面有循环,unique
的值永远不会大于2
。 n
是数组中整数的总数(我逐行从文件中读取整数)。
我完全被难住了,已经很久了。为什么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
正在更改循环的每次迭代,我认为这是无意的。
unique
的printf
在 for 循环之外。