C 案例结构出现问题
我正在做我的项目,在turbo C编译器中实现一个类型导师应用程序 (这是限制),这个函数实际上是x、y和键字符的查找表,但它在我传入参数的第一个值处返回一个垃圾值。 从第二个开始,它开始做正确的事情。 注意,x,y是一次返回两个值的指针。 请检查我的错误是什么C 案例结构出现问题,c,graphics,turbo-c,C,Graphics,Turbo C,我正在做我的项目,在turbo C编译器中实现一个类型导师应用程序 (这是限制),这个函数实际上是x、y和键字符的查找表,但它在我传入参数的第一个值处返回一个垃圾值。 从第二个开始,它开始做正确的事情。 注意,x,y是一次返回两个值的指针。 请检查我的错误是什么 s1 = "ASDF JKL; ADSF JLK; "; char take_xy(char s1[], int j, int *x, int *y) { char ch; switch(s1[j]) {
s1 = "ASDF JKL; ADSF JLK; ";
char take_xy(char s1[], int j, int *x, int *y)
{
char ch;
switch(s1[j])
{
case 'Q' : *x = 137; *y = 244; ch = 'Q'; break;
case 'W' : *x = 160; *y = 244; ch = 'W'; break;
case 'E' : *x = 183; *y = 244; ch = 'E'; break;
case 'R' : *x = 206; *y = 244; ch = 'R'; break;
case 'T' : *x = 229; *y = 244; ch = 'T'; break;
case 'Y' : *x = 252; *y = 244; ch = 'Y'; break;
case 'U' : *x = 275; *y = 244; ch = 'U'; break;
case 'I' : *x = 298; *y = 244; ch = 'I'; break;
case 'O' : *x = 321; *y = 244; ch = 'O'; break;
case 'P' : *x = 344; *y = 244; ch = 'P'; break;
case 'A' : *x = 144; *y = 268; ch = 'A'; break;
case 'S' : *x = 167; *y = 268; ch = 'S'; break;
case 'D' : *x = 190; *y = 268; ch = 'D'; break;
case 'F' : *x = 213; *y = 268; ch = 'F'; break;
case 'G' : *x = 236; *y = 268; ch = 'G'; break;
case 'H' : *x = 259; *y = 268; ch = 'H'; break;
case 'J' : *x = 282; *y = 268; ch = 'J'; break;
case 'K' : *x = 305; *y = 268; ch = 'K'; break;
case 'L' : *x = 328; *y = 268; ch = 'L'; break;
case ';' : *x = 351; *y = 268; ch = ';'; break;
// case ''' : *x = 374; *y = 268; ch = '''; break;
case 'Z' : *x = 162; *y = 292; ch = 'Z'; break;
case 'X' : *x = 185; *y = 292; ch = 'X'; break;
case 'C' : *x = 208; *y = 292; ch = 'C'; break;
case 'V' : *x = 231; *y = 292; ch = 'V'; break;
case 'B' : *x = 254; *y = 292; ch = 'B'; break;
case 'N' : *x = 277; *y = 292; ch = 'N'; break;
case 'M' : *x = 300; *y = 292; ch = 'M'; break;
case '?' : *x = 369; *y = 292; ch = '?'; break;
case ' ' : *x = 189; *y = 316; ch = ' '; break;
}
return ch;
}
您发布的代码没有问题,错误一定在其他地方。我会检查您如何调用此函数。我猜'j'参数小于0或大于19 还可以在调试器中运行,并在第一次调用时检查所有参数的值 正如@Matthew Flaschen所指出的,让我们看看调用代码 编辑
您可能还需要添加一个
default
子句来捕获任何不匹配的内容。看起来该开关中可能没有包含sl[j]的内容,因此在堆栈上创建时,“ch”具有其包含的任何默认值
我将执行以下操作之一:
张贴你用来调用它的代码。我也不明白为什么在函数外有一个单独的
s1
变量。顺便说一句,看起来你可以删除所有ch=''.'
语句,然后从这个函数中执行返回s1[j]
;但正如Matthew所说,这看起来很好,因此问题可能出在调用函数本身的代码中,而不是函数本身。默认值不是问题。第二,我已经通过调试器进行了检查,但没有问题。如果我添加默认值,那么它将返回未进入大小写结构的默认值。这告诉我sl[j]的内容不在开关的范围内。当你调试这个函数时,它有什么价值?