C 案例结构出现问题

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]) {

我正在做我的项目,在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])
    {
        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”具有其包含的任何默认值

我将执行以下操作之一:

  • 在交换机中使用sl[j]之前,请对其内容进行规范化
  • 将“默认”标记添加到交换机
  • 声明“ch”时将其初始化为某个默认值(相当于选项2)

  • 张贴你用来调用它的代码。我也不明白为什么在函数外有一个单独的
    s1
    变量。顺便说一句,看起来你可以删除所有
    ch=''.'
    语句,然后从这个函数中执行
    返回s1[j]
    ;但正如Matthew所说,这看起来很好,因此问题可能出在调用函数本身的代码中,而不是函数本身。默认值不是问题。第二,我已经通过调试器进行了检查,但没有问题。如果我添加默认值,那么它将返回未进入大小写结构的默认值。这告诉我sl[j]的内容不在开关的范围内。当你调试这个函数时,它有什么价值?