[英]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.