2

私はオペレーティングシステムのクラスでCを使用することを学んでいます。これは、関数が2つの配列の共通部分を見つけるためにこれまでに持っているものです。

交差点は基本的に、2つのセットを取得し、両方のセットにある要素のみを取得する場合です。

したがって、たとえば、セットAに= {1,2,3}が含まれ、セットBに= {2,3,4}が含まれる場合、AとBの共通部分は{2,3}になります。2つの配列を取得し、通過する両方の配列にある整数を含む配列を返す関数をCで作成しようとしています。

私はここでほとんど解決策があると思いますが、「識別子'カウント'は未定義です」というエラーが表示されます

    int intersection(int array1[4], int array2[4])
    {       
        int arrayReturn[sizeof(array1) + sizeof(array2)]
        int count = 0;

        for(int i = 0; i < 4; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                if(array1[i]==array2[j])
                {
                    count = count + 1;
                    arrayReturn[count] = array1[i];
                }
            }
        }

    }

私はJavaに非常に慣れており、JavaとCはほぼ同じだと感じています。countはifステートメント内のスコープ内に十分収まっているため、ここで何が問題になっているのかを実際に見つけることはできません。カウントがどのように定義されていないのかわかりません。

countの何が問題になっていて、どうすればこの交差関数を修正できますか?

4

4 に答える 4

3

count宣言の前の行にセミコロンがありません。

  int arrayReturn[sizeof(array1) + sizeof(array2)]; //Semicolon Here
  int count = 0;

エラーはどのように表示されましたか? エラーメッセージが表示されたidentifier 'count' is undefinedので、最初に確認したのは、コンパイラが教えてくれた原因です。ただし、宣言があり、正しい範囲内にあるため、それは問題ではありませんでした。それで、今私は何をすべきですか?変数の初期化の直前の行と、使用法の直前の行を確認する必要があります。これは、最も確実にエラーを見つける場所です。

要するに、コンパイラのメッセージが役に立たないように思えても、やめないでください。見回す。


また、GRAYgoose124 が指摘しているように、関数は整数を返すことになっているため、関数本体の最後に return ステートメントが必要です。

于 2013-02-20T02:18:12.163 に答える
1

この行にセミコロンがありません:

int arrayReturn[sizeof(array1) + sizeof(array2)]; //semicolon was missing
于 2014-01-25T15:53:25.880 に答える
0

AshRj が指摘しているように、セミコロンがありません。

ヒント: clangコンパイラは、診断出力の提供に優れています。それを使用してコードをコンパイルしようとすると、次の出力が得られます。

source.c:3:57: error: expected ';' at end of declaration
        int arrayReturn[sizeof(array1) + sizeof(array2)]
                                                        ^
                                                        ;

プロジェクトを通常の方法で clang でコンパイルしていない場合でも、スニペットをコンパイルして何が問題なのかを調べることができます。ここでわかるように、それは私があなたのスニペットで行ったことです。(警告にも注意してください。)

于 2013-02-20T02:22:28.977 に答える