这是我的问题:
我需要在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++;
}
}
答案 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
}
最初可能困扰你的一件事是pZ
和ZZ
分别是函数someFun()
和someFun1()
中的局部变量。但他们的内容不同。
在第一种情况下,pZ
是包含变量Z
地址的局部变量,ZZ
也是包含与Z
相同值的局部变量。然后你可能会问,为什么会有区别?
因为在第一种情况下,通过转到地址(取消引用它),您正在更改您传递地址的main()
的本地实际变量。
在第二种情况下,你没有得到地址,你正在为someFun1
的局部变量制作chnage,并且该chnage发生在与原始变量完全不同的地方。这就是为什么它没有反映在main()
。
引用标准scanf
返回
<强>
§7.21.6.4
强>如果输入,
scanf
函数返回宏EOF
的值 在第一次转换(如果有)完成之前发生故障。 否则,scanf
函数返回输入项的数量 已分配 $ ,这可能少于提供的,甚至为零 早期匹配失败的事件。
$:输入项目已成功匹配并已分配