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不能很好地一起玩的循环。删除一个或另一个。例如:

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

您在两个函数中循环遍历数组,只需在其中一个函数中执行即可。

于 2013-09-11T17:44:25.583 回答
1

一个 for 循环就足够了

#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);
}

5用其他方式替换len参数的重点是什么,最后一个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 回答