2014-09-05 66 views
0

好吧我有點困惑於C語言。
我需要做一個函數,它可以從用戶那裏獲得一個數字並將它發送給其他一些函數(取決於哪一個正在運行)。
沒有它這些功能看起來像這樣如何在函數之間傳遞此數字? C

void deflator(FILE** fw_vystup) { 
    float ipd, n_hdp = 0.0f, r_hdp = 0.0f; 
    do { 
     printf("Type in a GDP: "); 
     if (1 != scanf("%f", &n_hdp)) { 
      vyprazdni_buffer(); // this is just cleaning the buffer 
      continue; 
     } 
    } while (n_hdp <= 0); 
    ... 

所以我做了像這樣

void zadani_cisla(float cislo) { 
    do { 
     printf("Wrong input!"); 
     if (1 != scanf("%f", &cislo)) { 
      vyprazdni_buffer(); 
     } 
    } while (cislo <= 0); 
} 
void deflator(float cislo, FILE** fw_vystup) { 
    float ipd, n_hdp = 0.0f, r_hdp = 0.0f; 
    do { 
     printf("Zadejte nominalni domaci produkt daneho roku: "); 
     zadani_cisla(cislo); 
     n_hdp = cislo; 

    } while (n_hdp <= 0); 

,它仍然是說輸入錯誤,因爲沒有獲得我鍵入數字我猜。 你能看到問題嗎?預先感謝。

+0

請用英語找字符串和標識符! – 2014-09-05 19:47:18

+0

@BasileStarynkevitch:他爲什麼要那樣做?他應該使用他熟悉的標識符名稱。 – 2014-09-05 20:11:57

+0

因爲代碼是給SO的讀者的信息,我們用英文閱讀這個論壇! (但我不是以英語爲母語的人)。 – 2014-09-05 20:15:44

回答

2

你沒有通過引用傳遞你的號碼。例如,你需要更改下列你的函數deflator

zadani_cisla(cislo); 

zadani_cisla(&cislo); /* pass by reference */ 

通過這種方式,功能zadani_cisla將在deflator

也可以看到內該變量的任何改變在zadani_cisla內,您將需要更改以下行:

if (1 != scanf("%f", &cislo)) { 
     vyprazdni_buffer(); 
    } 

if (1 != scanf("%f", cislo)) { 
     vyprazdni_buffer(); 
    } 

作爲可變cisla已經是指針變量。你需要改變的zadani_cisla

1

定義在這個循環中:

void zadani_cisla (float cislo) 
{ 
    do { 
     printf("Wrong input!"); 
     if (1 != scanf("%f", &cislo)) { 
      vyprazdni_buffer(); 
     } 
    } while (cislo <= 0); 
} 

中的printf將總是至少發生一次。 你的第二個問題是浮點數在C中被傳值,所以zadani_cisla不能在調用它的函數中改變cislo。

更好:

void zadani_cisla (float * cislo) 
{ 
    do { 
     if ((1 == scanf("%f", cislo)) && (*cislo > 0)) break; 
     vyprazdni_buffer(); 
     printf("Wrong input!"); 
    } while (1); 
} 

zadani_cisla(&cislo); 
0

你可以有一個函數返回一些浮動:

float ask_float(void) { 
    float f = 0.0; 
    do { 
    if (scanf("%f", &f)<=0) 
     printf("wrong float:\n"); 
    else return f; 
    } while(true); 
} 

那你會爲使用:

float f; 
f= ask_float(); 

或者你可以傳遞一個指針:

void do_ask_float (float*pf) { 
    do 
    if (scanf("%f", pf)<=0) 
     printf("wrong float:\n"); 
    else return; 
    } while(true); 
} 

,你會稱呼其爲:

float f =0.0; 
do_ask_float(&f);