首页 > 解决方案 > 全局函数未返回正确的值

问题描述

我正在尝试使用全局函数编译向量的第一个非零值。但是当我编译时,它返回原始值 k1=k2=1,而它应该是 k1=0 和 k2=2。不?我的代码如下所示:

#include<math.h>
#include<stdlib.h>

int primeiro(float vec[], int f)
{
  f=0;

    while(vec[f]==0)
    {
     f++;
    }

 return f;
}


int main()

{
float poli1[4]={1,2,3,4}, poli2[4]={0,0,5,6};
int k1=1, k2=1, i;

printf(" \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli1[i]);
  }

printf("\n \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli2[i]);
  }

printf("\n \n");

primeiro(poli1, k1);
printf("%d \n", k1);
primeiro(poli2, k2);
printf("%d \n", k2);
                
}```

标签: cfunctionglobal-variables

解决方案


您需要使用传递引用(指针)来更改主代码中 k1 的值(它退出的范围)或将 primeiro 的 inovcation 分配给 k1 9k1 = primeiro(poli1, k1);) 这实际上是从中返回值。

修改后的实施:

#include<math.h>
#include<stdlib.h>

int primeiro(float vec[], int f)
{
  f=0;

    while(vec[f]==0)
    {
     f++;
    }

 return f;
}


int main()

{
float poli1[4]={1,2,3,4}, poli2[4]={0,0,5,6};
int k1=1, k2=1, i;

printf(" \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli1[i]);
  }

printf("\n \n");

for(i=0; i<4; i++)
  {
     printf("%g\t", poli2[i]);
  }

printf("\n \n");

k1 = primeiro(poli1, k1);
printf("%d \n", k1);
k2 = primeiro(poli2, k2);
printf("%d \n", k2);
            

推荐阅读