-2

我正在尝试编写一个程序,其中将有两个带有大代码块的函数。每个函数都将调用一些较小的函数。现在,在主程序体中,我需要调用两个较大的函数。我在程序中使用数组。

我做了一个样本,但我遇到了错误。请纠正我的代码。我是这个领域的新手。所以请帮忙。

# include <stdio.h>

unsigned char a[4] = {5, 3, 6, 2};
unsigned char b[4] = {3, 5, 2, 5};
unsigned char c[4] = {4, 2, 5, 7};
unsigned char x[4];
unsigned char y[4];

void add(unsigned char* num1, unsigned char* num2, unsigned char* num3)
{
  int k;
  for (k=0; k<3; k++)
  {
   num3[k] = num1[k] + num2[k]);
  }
}

void mul(unsigned char* num1, unsigned char* num2, unsigned char* num3)
{
  int k;
  for (k=0; k<3; k++)
  {
    num3[k] = num1[k] * num2[k]);
  }
}

void test1(unsigned char* num1, unsigned char* num2, unsigned char* num3)
{
  add(num1, num2, num3);
  mul(num1, num2, num3);
}

void test2(unsigned char* num1, unsigned char* num2)
{
  add(num1, num2, num1);
}

void main() 
{
  int i,j ;

  test1(a,b,x);
  test2(c,y);

  for (i=0; i<4; i++)
  {
    printf("%d ",(x[i]);
  }
  printf(" ");

  for (i=0; i<4; i++)
  {
    printf("%d ", y[i]);
  }
}
4

5 回答 5

1

有几个编译和逻辑错误:

  • 编译错误
    • 缺少右大括号}
    • 缺少右括号)
    • 额外的闭合支架)
  • 逻辑错误
    • 无效的数组边界检查

正确的缩进可以很容易地识别错误匹配的括号和大括号的此类问题,以修复其他看似神秘的错误,例如"expected ; before ..."

这是您更正的代码,其中包含描述错误和修复的内联注释。

# include <stdio.h>

unsigned char a[4] = {5, 3, 6, 2}; 
unsigned char b[4] = {3, 5, 2, 5}; 
unsigned char c[4] = {4, 2, 5, 7}; 
unsigned char x[4];
unsigned char y[4];

void add(unsigned char* num1, unsigned char* num2, unsigned char* num3)
{
        int k;
        for (k=0; k<4; k++) {
                /* removed extra closing bracket */
                num3[k] = num1[k] + num2[k];
        }   
}

void mul(unsigned char* num1, unsigned char* num2, unsigned char* num3)
{
        int k;
        /* fixed value of array bounds check */
        for (k=0; k<4; k++) {
                num3[k] = num1[k] * num2[k];
        }   
}

void test1(unsigned char* num1, unsigned char* num2, unsigned char* num3)
{
        add(num1, num2, num3);
        mul(num1, num2, num3);
}

void test2(unsigned char* num1, unsigned char* num2)
{
        add(num1, num2, num1);
}

int main() 
{
        int i,j ;

        test1(a,b,x);
        test2(c,y);

        for (i=0; i<4; i++) {
                /* added missing closing bracket */
                printf("%d ",(x[i]));
        /* added missing closing brace */
        }   

        printf(" ");

        for (i=0; i<4; i++) {
                printf("%d ", y[i]);
        }   
}
于 2013-08-03T06:38:52.120 回答
0

您的数组是 4 个项目,但您使用的是索引 <3

for (k=0; k<3; k++)

应该

for (k=0; k<4; k++)

在这里你有一个额外的)

num3[k] = num1[k] + num2[k]);
num3[k] = num1[k] * num2[k]);
于 2013-08-03T06:39:03.173 回答
0

在 num2[k] 之后不应该有一个括号,并将它们所在的循环从 < 3 更改为 <=3。你错过了一个 ( in printf("%d ", (x[i]) )

于 2013-08-03T06:40:38.407 回答
0

似乎 x 和 y 未初始化,因此将 y 传递给 test2 会导致垃圾值传递给 add 的第二个参数。

于 2013-08-03T06:40:50.837 回答
0

num3[k] = (num1[k] + num2[k]); //fix bracket

printf("%d ",x[i]); //fix bracket

于 2013-08-03T06:41:08.597 回答