2012-07-01 145 views
-2

我的問題是,此函數返回的猜測是97和y的總和,而不是像switch語句指示的那樣只是字母。奇怪的是,當我剛回來時,它的工作方式和我預期的完全一樣。例如,當y = 4,並且返回y時,將顯示4。當y = 4並且返回'guess'時,顯示101。免責聲明:這不是完整的代碼。這真的很長,我認爲是多餘的,因爲我唯一的問題是這個特定的函數返回'猜測',甚至不會返回y。如果所有的代碼都可以使用,我會很樂意加以解決。C++ switch語句返回奇怪值

int letterguess(int z){ 
char guess; 
int y; 

y=letters[0][z]; 

switch (y){ 
      case 0: 
       guess='a'; 
       break; 
      case 1: 
       guess='b'; 
       break; 
      case 2: 
       guess='c'; 
       break; 
      case 3: 
       guess='d'; 
       break; 
      case 4: 
       guess='e'; 
       break; 
      case 5: 
       guess='f'; 
       break; 
      case 6: 
       guess='g'; 
       break; 
      case 7: 
       guess='h'; 
       break; 
      case 8: 
       guess='i'; 
       break; 
      case 9: 
       guess='j'; 
       break; 
      case 10: 
       guess='k'; 
       break; 
      case 11: 
       guess='l'; 
       break; 
      case 12: 
       guess='m'; 
       break; 
      case 13: 
       guess='n'; 
       break; 
      case 14: 
       guess='o'; 
       break; 
      case 15: 
       guess='p'; 
       break; 
      case 16: 
       guess='q'; 
       break; 
      case 17: 
       guess='r'; 
       break; 
      case 18: 
       guess='s'; 
       break; 
      case 19: 
       guess='t'; 
       break; 
      case 20: 
       guess='u'; 
       break; 
      case 21: 
       guess='v'; 
       break; 
      case 22: 
       guess='w'; 
       break; 
      case 23: 
       guess='y'; 
       break; 
      case 24: 
       guess='y'; 
       break; 
      case 25: 
       guess='z'; 
       break; 

     } 

     return guess; 

} 

我真的不明白這可能會如何搞砸這樣。提前致謝。

+2

爲什麼從返回'int'的函數返回'char'? – Griwes

+8

'guess = static_cast (y)+'a';'替換您的開關。 – David

+1

@Dave:的確,雖然技術上不可移植。 –

回答

0

更改此:

int letterguess(int z) 

本:

char letterguess(int z) 

然後,當您輸出返回值時,您將獲得字母而不是其數值。

+0

簡單地說:沒有。 – 2012-07-01 20:04:33

+0

@ H2CO3你是什麼意思? – robert

+0

它如何聲明並不重要。它很重要你如何嘗試輸出它。 – 2012-07-01 20:14:25

11

這正是你告訴它要做的。在標準ASCII character seta具有價值97

這不是完全清楚你試圖做,雖然。您已將函數的返回類型指定爲int,但您將返回值設置爲字符文字。如果你想返回一個字符,然後您可以顯示,我建議改變返回類型char,並做類似如下:

char c = letterguess(blah); 
std::cout << c << "\n"; 
+0

哦,好吧我從來不會想到這一點。我怎樣才能讓它返回字符'a'?編輯:沒關係,想通了。只需要將函數'char'而不是'int'。非常感謝你的幫助我真的很沮喪 – user1418214

+1

@ user1418214:你**正在返回字符''a'',但一個字符只是一個整數值。這只是一個解釋問題。如果你做了'printf(「%c \ n」,(char)letterguess(blah));',你會看到一個字符。如果你做了'printf(「%d \ n」,letterguess(blah));',你會看到一個整數值。 –

+2

@ user1418214 - 它返回字符'a'。您只需要將其打印爲字符,而不是整數值。 –

1

這很有道理。既然你聲明y是一個整數,當你輸出y時,你會得到一個整數。由於charcan be mapped爲整數,所以輸出的是整數值。在這種情況下,'e'的值是十進制的101.