2012-07-01 98 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.