为什么循环中的值永远不会大于2?

时间:2016-01-23 23:54:42

标签: c arrays if-statement for-loop

我有以下循环,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:%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

3 个答案:

答案 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循环。