函数似乎没有修改数组

时间:2017-02-05 19:05:18

标签: c arrays

我正在编写一个程序,该程序应该接受0和1的输入并将它们分配到数组中。然后它将数组传递给edge函数并按以下方式格式化它。

  1. 每当两个连续位(一位和它的位)时,为输出位模式分配1 前一点)是不同的
  2. 每当两个连续位(一位和它的位)时,为输出位模式分配0 前一位)是相同的
  3. 将0分配给第一个输出位,因为第一位没有前一位
  4. 问题是,当数组传递给函数并调用printf时,它只是打印出原始输入。我从不同的角度看待它,似乎看不出什么错误。

    #include <stdio.h>
    
    void edge(int n, int a1[], int a2[])
    {
        int i = 1;
        a2[0] = 0;
        int last = a1[i-1];
        printf("%d", a2[0]);
        for(i = 1; i < n; i++)
        {
            if(last == a1[i])
            {
                    a2[i] = 0;
            }
            else
            {
                    a2[i] = 1;
            }
        printf("%1d", a2[i]);
    }
    }
    
    int main(void)
    {
        int i = 0;
        int num;
    
        int array1[8];
        int array2[8]={0};
    
        printf("Enter an 8-digit barcode: \n");
        for(i = 0; i < 8; i++)
        {
            scanf("%1d", &num);
            if(num == 1)
            {
                    array1[i] = 1;
            }
        }
        printf("Output: ");
    
        edge(8, array1, array2);
    
        return 0;
    }
    

1 个答案:

答案 0 :(得分:1)

如果您未在循环中更新last,则始终会将a2[]中存储的值与相同的值进行比较,这似乎不是您的目标。 因此在循环中更新last

void edge(int n, int a1[], int a2[])
{
    int i;
    a2[0] = 0;
    int last;
    printf("%d", a2[0]);
    for(i = 1; i < n; i++) {
        last = a1[i-1];
        if(last == a1[i])
            a2[i] = 0;
        else 
            a2[i] = 1;
        printf("%1d", a2[i]);
    }
}