繁体   English   中英

在其他功能中使用输入的值

[英]Using entered value in another function

这是我的问题:我需要在主函数中输入值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++; 
    }
}

您以错误的方式使用了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()本地的实际变量。

在第二种情况下,你没有得到的地址,你正在chnages到的局部变量someFun1和chnage在一个完全不同的地方比原来变的发生。 这就是为什么它没有反映在main()

引用scanf返回的标准

§7.21.6.4

如果在第一次转换(如果有的话)完成之前发生输入失败, scanf函数将返回宏EOF的值。 否则, scanf函数将返回分配给 $ 的输入项目的数量,该数量可能少于所提供的数量,甚至在早期匹配失败的情况下为零。

$:成功匹配和分配输入项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM