在另一个函数中使用输入值

时间:2017-11-25 14:29:54

标签: c function

这是我的问题: 我需要在main函数中输入值X(数字),然后在其他函数中使用此扫描值。这是我的代码的一小部分,但我认为这足以理解我的意思。 我认为通过使用类似int main(int argc, char *argv[], int Z)之类的东西以及void函数中的相同内容或使用指针它是可以解决的但是当我尝试时它对我不起作用。也许有人可以解释并说明如何正确地做到这一点?

int main(int argc, char *argv[]) {
int Z;
.... // rest of the code
    printf("Enter Z value:");
    Z = scanf("%d", &Z);
}
void function1(float array[100]){
    int i, Z, A=0;
    for(i=0; i<100;i++){
        if(array[i]>Z){
        A++; 
    }
}

1 个答案:

答案 0 :(得分:0)

您错误地使用了scanf。您正使用scanf返回的值覆盖使用scanf读取的值。

int Z;
...
if( scanf("%d",&Z) == 1) 
// Z is inputted correctly

现在你要传递它,有不同的方法来做到这一点。

您是否有可能更改传递给它的其他函数中Z的值作为参数并希望在被调用函数中保留更改的值?

如果是,则使用指针传递它的地址,然后将其解除以访问原始变量。

someFun( &Z );

然后在someFun()

void someFun( int * pZ){
   //read it
   printf("%d", *pZ);
   // write over it
   if( scanf("%d",pz) == 1){ /**/ }
   *pZ = 2017;
}

如果答案为否,那么您可以简单地传递变量的副本。

someFun1(Z);

void someFun1(int ZZ){
  // read it 
  printf("%d", *pZ);
  //write it
  Z = 2017;
  //But this change won't be reflected on the `main()` or callee function 
}

最初可能困扰你的一件事是pZZZ分别是函数someFun()someFun1()中的局部变量。但他们的内容不同。

在第一种情况下,pZ是包含变量Z地址的局部变量,ZZ也是包含与Z相同值的局部变量。然后你可能会问,为什么会有区别?

因为在第一种情况下,通过转到地址(取消引用它),您正在更改您传递地址的main()的本地实际变量。

在第二种情况下,你没有得到地址,你正在为someFun1的局部变量制作chnage,并且该chnage发生在与原始变量完全不同的地方。这就是为什么它没有反映在main()

引用标准scanf返回

  

<强> §7.21.6.4

     

如果输入,scanf函数返回宏EOF的值   在第一次转换(如果有)完成之前发生故障。   否则,scanf函数返回输入项的数量   已分配 $ ,这可能少于提供的,甚至为零   早期匹配失败的事件。

$:输入项目已成功匹配并已分配