C++ C++;switch语句正在返回奇怪的值

C++ C++;switch语句正在返回奇怪的值,c++,switch-statement,C++,Switch Statement,我的问题是,这个函数返回的guess是97和y的和,而不是switch语句指示它返回的字母。奇怪的是,当我让它返回y时,它的工作方式完全符合我的预期。例如,当y=4,我让它返回y时,将显示4。当y=4且返回“猜测”时,显示101。免责声明:这不是完整的代码。它真的很长,我认为是多余的,因为我唯一的问题是当这个特定函数返回'guess'时,而不是当它返回y时。如果所有的代码都有用的话,我很乐意把它放上去 int letterguess(int z){ char guess; int y; y=l

我的问题是,这个函数返回的guess是97和y的和,而不是switch语句指示它返回的字母。奇怪的是,当我让它返回y时,它的工作方式完全符合我的预期。例如,当y=4,我让它返回y时,将显示4。当y=4且返回“猜测”时,显示101。免责声明:这不是完整的代码。它真的很长,我认为是多余的,因为我唯一的问题是当这个特定函数返回'guess'时,而不是当它返回y时。如果所有的代码都有用的话,我很乐意把它放上去

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;

}

我真的看不出怎么会这样搞砸。提前谢谢。

这正是您告诉它要做的。在标准中,
a
具有值
97
,等等

不过,你想做什么还不完全清楚。您已将函数的返回类型指定为
int
,但将返回值设置为字符文字。如果要返回一个可以显示的字符,我建议将返回类型更改为
char
,并执行以下操作:

char c = letterguess(blah);
std::cout << c << "\n";
charc=letterguess(废话);
标准::不能改变这一点:

int letterguess(int z)
为此:

char letterguess(int z)

然后,当您输出返回值时,您将得到字母而不是其数值。

这非常有意义。由于您已将
y
声明为整数,因此当您输出
y
时,您将得到一个整数。由于
char
是一个整数,因此
char
的整数值就是输出的值。在这种情况下,“e”的值是十进制101。

为什么从返回的函数
int
返回
char
guess=static_cast(y)+“a”替换您的开关。@戴夫:实际上,虽然技术上不是可移植的。也可以考虑使用一些数学方法来完全消除开关。@ H2CO3:例如,考虑字符集。至少在C语言中,只有
'0'
-
'9'
保证有连续的值。哦,好吧,我从来没有想到这一点。如何使其仅返回字符“a”?编辑:没关系,算了吧。只需要将函数设置为“char”而不是“int”。非常感谢你的帮助我真的很高兴frustrated@user1418214:您正在返回字符
'a'
,但字符只是一个整数值。这只是一个解释的问题。如果您使用了
printf(“%c\n”,(char)letterguess(blah)),您将看到一个字符。如果您使用了
printf(“%d\n”,letterguess(废话)),您将看到一个整数值。@user1418214-它返回字符“a”。您只需要将其打印为字符,而不是int值。它的声明方式无关紧要。这是至关重要的,你尝试如何输出它。@ H2CO3这是C++,所以我假设他使用了Os流和<代码>。