我有以下循环,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:%d\n", i);
printf("n:%d\n", n);
printf("last:%d\n:", last);
}
}
printf("unique:%d\n", 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
答案 0 :(得分:1)
您错误输入了数组索引:使用array[i]
代替array[n]
。
这是一个更简单的版本:
int unique;
for (unique = 1; unique < n && array[unique] == array[unique - 1]; unique++) {
continue;
}
printf("unique:%d\n", unique);
答案 1 :(得分:0)
由于您无法修改n,因此循环中会发生以下情况:
if (array[n] != last ) {
last = array[n];
在第一次迭代中,last被分配了array [n],这就是这种方式。 因此,稍后if条件总是为假。
答案 2 :(得分:0)
你能解释一下你的整数读法吗?您的OUTPUT是使用不同的整数集多次运行代码的结果吗?
if (array[n] != last) {
如果array
的大小为n
,则在if语句中访问array[n]
是危险的,因为可以通过array[0]
访问n大小的数组, array[1]
,...,array[n-1]
。你的意思是测试array[i]
吗?
last = array[n];
与上述问题相同。
你的n
正在改变循环的每次迭代,我认为这是无意的。
printf
的{{1}}超出for循环。