2016-07-27 30 views
0

不幸的是,我試圖從用戶定義的函數中檢索數據,我無法這樣做。無法從用戶定義的函數獲取值

例如,我有兩個用戶定義函數是

爲getPosition:爲了知道基於用戶輸入在圖上的位置

printPosition:爲了顯示信息基於在圖表上

因此,例如,我getPosition的位置,我做了一個簡單的if else語句

char getPosition (float x, float y){ 

char position; 

if (x > 0 && y > 0) 

    position = 1; 

else if (x < 0 && y > 0) 

    position = 2; 

...... 

return position; 

接着,我嘗試printPosition使用開關殼體

switch(position) 
{ 

    case '1' : cout << "==> (" << x << ", " << y << ") is above X-axis" << endl; 
       cout << "==> It is at first quadrant" << endl; 
       break; 

    case '2' : cout << "==> (" << x << ", " << y << ") is above X-axis" << endl; 
       cout << "==> It is at second quadrant" << endl; 
       break; 

    ....... 

} 

所以具有兩個用戶定義函數後,我試圖在getPosition呼籲的值,以從printPosition

printPosition(x, y, getPosition(x,y)); 
數據打印出來

但是,它不會產生任何輸出。這是爲什麼。

在此先感謝您的幫助。

+0

請** [編輯] **用[MCVE]或您的問題[SSCCE(短的,獨立的,正確的示例)](HTTP:// SSCCE。 org) – NathanOliver

+0

這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:** [如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)** – NathanOliver

+0

如果產生錯誤,我很樂意進行調試任何錯誤,不幸的是,我設法編譯它們,使我很難找出問題所在。 –

回答

4

要麼改變:

position = 1; 
position = 2; 
... 

要:

position = '1'; 
position = '2'; 
... 

或更改:

case '1': 
case '2': 
... 

要:

case 1: 
case 2: 
... 
+0

...因爲''1''是一個字符,其對應的ASCII(或utf8)代碼是49,所以''1'!= 1' ... –

+0

爲什麼沒有函數返回int? –

+0

@DanKorn它並不重要。它也可以返回一個枚舉,只要它匹配'case's。 –

0

position = '1'; 
position = '2'; 

你也應該始終有一個默認的說法在switch語句,因爲這有助於你明白,沒有一個case語句被執行,調試的簡單方法。

可以實現這樣的:

switch(position) 
{ 
case '1': 
//whatever 
break; 
case '2': 
//whatever 
break; 
default: 
//Can have a message like: 
cout << "The value was not in any of the case statements" << endl; 
//No break needed for default statements 
} 
相關問題