int FLAG=1;
sscanf(Buffer,"%d,%d,%d,%d,%d ",&(m_pSnake.now->x),&(m_pSnake.now->y),&FLAG,&_x,&_y);
ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]=FLAG;sscanf(Buffer,"%d,%d,%d,%d,%d ",&(m_pSnake.now->x),&(m_pSnake.now->y),&(ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]),&_x,&_y);从个方面上来说,这两个语句是一样的吧?

解决方案 »

  1.   

    To JennyVenus(山下一群鹅) 
    好象不一样的
    我的Buffer是从一个文件中读取出来的数据.Buffer=CString Type。m_pSnake是个链表,这些数据的定义都是没有问题的。sscanf(Buffer,"%d,%d,%d,%d,%d ",&(m_pSnake.now->x),&(m_pSnake.now->y),&(ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]),&_x,&_y);
    当第三个%d=3的时候,ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]的不到这个值!但
    int FLAG=1;
    sscanf(Buffer,"%d,%d,%d,%d,%d ",&(m_pSnake.now->x),&(m_pSnake.now->y),&FLAG,&_x,&_y);
    ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]=FLAG;
    读出来的值都很正确。可是如果单独把Buffer设置为"0,0,3,1,1"等等字符串,两个的执行效果又都一样了!!为什么?
      

  2.   

    这是一个编译的问题,因为你作为 sscanf 参数的数组元素和 sscanf 的结果相关,造成了不确定性:sscanf(Buffer,"%d,%d,%d,%d,%d ",&(m_pSnake.now->x),&(m_pSnake.now->y),&(ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]),&_x,&_y);对编译而言肯定是这样处理的:
    // 不代表真实汇编代码,只是示例
    push &_y
    push &_x
    push &(ArrayGrid[m_pSnake.now->x][m_pSnake.now->y]); // 此时看到的 x ,y 值是旧的
    push &(m_pSnake.now->y)
    push &(m_pSnake.now->x)
    push "%d,%d,%d,%d,%d "
    push Buffer
    call sscanf // 这时 sscanf 才把读到的值写入 m_pSnake.now->x,y 显然,这个不会有这样的问题:int FLAG = 1;
    sscanf(Buffer,"%d,%d,%d,%d,%d ",&(m_pSnake.now->x),&(m_pSnake.now->y),&FLAG,&_x,&_y);
    ArrayGrid[m_pSnake.now->x][m_pSnake.now->y] = FLAG; // 这时 m_pSnake.now->x,y 被更新了
      

  3.   

    我在学语言的时候记得,运算式的编译处理过程,一般编译式都是从右朝左的编译过程,好象只有很少的运算式是从右朝左的 : ? 。
    THANK TO In355Hz(好象一条狗)