我正在编写一个程序,该程序应该接受0和1的输入并将它们分配到数组中。然后它将数组传递给edge函数并按以下方式格式化它。
问题是,当数组传递给函数并调用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;
}
答案 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]);
}
}