你已经在错误的方式使用的scanf
。您将要覆盖阅读与scanf
与scanf
返回的值的值。
int Z;
...
if(scanf("%d",&Z) == 1)
// Z is inputted correctly
现在你想通过它,有不同的方法来做到这一点。
您是否有可能在其他函数中将Z
的值更改为您将其作为参数传递给它的函数,并且希望将更改后的值保留在被调用函数中?
如果是,那么你使用指针传递它的地址,然后derefrence它来访问原始变量。
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
函数返回所分配$输入项目 ,其可以是少于规定的,或甚至零,在 事件的早期匹配失败的数目。
$:输入项目匹配成功并分配
有很多事情在你的代码失踪。 – coderredoc
@dazzle有一个function1的调用? –
这只是我的代码的一小部分。我只需要知道如何获得我在主功能中输入的相同Z值,以便在第二个功能中可用。 – dazzle