0

配列の位置が等しい場合に整数を挿入しようとして3いますが、残念ながら配列aを印刷すると、次のような不合理な結果が得られます。

   0
   0
   2

一方、期待される結果は次のとおりです。

   0
   0
   128
   0
   0

私のコードは次のとおりです。

#include<stdio.h>
int substitute_and_sum(int *a, int len)
{

    int sum = 0, i;
    for (i = 0; i < 5; i++)
    {
        if (i == 3)
        {
            a[i] = 128;
        }
    }

    printf("%d\n", *a);
    return 0;
}

int main()
{

    int arr[] = { 0, 0, 2, 0, 0 };
    int j = 5, i;

    for (i = 0; i < 5; i++)
    {
        substitute_and_sum(&arr[i], j);
    }
}
4

5 に答える 5

3

次のように呼び出すだけです

int main(){

 int arr[]={0,0,2,0,0};
 int j=5,i;

 //for(i=0;i<5;i++)
 //{
  substitute_and_sum(arr,j);
 //}
}

または使用:-

void substitute_and_sum(int *a)
{   
    *a = 128;
}

そしてでmain

for (i = 0; i < 5; i++)
{
    if (i == 2) //Note its index 2, not 3
    substitute_and_sum(&arr[i]);
}
于 2013-09-11T17:44:13.247 に答える
3

for一緒にうまく再生できない2 つのループがあります。いずれかを削除します。例えば:

int main()
{

    int arr[] = { 0, 0, 2, 0, 0 };
    int j = 5;

    substitute_and_sum(arr, j);
    for (int i = 0; i < 5; i++)
    {
        printf("%d\n", a[i]);
    }
}

printfに移動したことに注意してくださいmain。あなたの既存のプログラムはかなり奇妙です。

于 2013-09-11T17:44:24.733 に答える
1

forループは1つで十分です

#include<stdio.h>
int substitute_and_sum(int* a, int len) {

int sum =0, i; 
for(i=0;i< len;i++)
{
 if(i==3)
        { 
     a[i] = 128;
    }
 printf("%d\n" , a[i]);  
}

 return 0;
}

 int main(){

 int arr[]={0,0,2,0,0};
 int j=5,i;
  substitute_and_sum(&arr[i],j);
}

それ以外5len場合は、引数のポイントでありprintf()、最初の要素の値のみを出力するため、最後は無意味です。

于 2013-09-11T17:46:02.187 に答える
1

これは機能します。配列の個々の値を送信するたびに、たとえばあなたのような場合に必要な場合は、そのインデックスを送信する習慣を作ります。

 #include<stdio.h>
    int substitute_and_sum(int *a, int i)
    {

            if (i == 3)


 {
            *a = 128;
        }
    printf("%d\n", *a);
    return 0;
}

int main()
{

    int arr[] = { 0, 0, 2, 0, 0 };
    int  i;

    for (i = 0; i < 5; i++)
    {
        substitute_and_sum(&arr[i], i);
    }
}
于 2013-09-12T09:48:12.983 に答える
1

両方の関数で配列をループしますが、どちらかで実行してください。

于 2013-09-11T17:44:25.583 に答える