-2

大きなコード ブロックを持つ 2 つの関数があるプログラムを作成しようとしています。各関数は、いくつかの小さな関数を呼び出します。ここで、メイン プログラム本体で、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 に変更します。(を逃しました printf( "%d ", (x[i]) )

于 2013-08-03T06:40:38.407 に答える
0

x と y は初期化されていないように見えるため、y を test2 に渡すと、add の 2 番目のパラメーターにガベージ値が渡されます。

于 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 に答える