[英]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
}
一开始可能会困扰您的是pZ
和ZZ
分别是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.