簡體   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