体育佬 2019-08-26 11:22 采纳率: 100%
浏览 865
已采纳

c++变量的定义与值的修改

各位大侠,我初学c++的老白兔,今天第一次上来,请教了。

函数splitmsg中我试图将参数str分解成三个内容:第一个是要移动的点A/B/C...(大写),第二个是要移动的轴x/y(小写),第三个参数是移动的步长。

函数返回一个字符串。头文件中已经定义了的public变量如下:

char CurPoint[2], CurAxis[2];
int CurMove;
DWORD Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,Ox,Oy;
DWORD Wx,Wy; //当前正处理的坐标

我希望从得到的三个变量中的头两个确定要移动的点、轴和移动的步长


char* Timer::splitmsg(char* str){
    //传过来的字符串格式:(A,x,-1)/(D,D,0)/(B,y,12)

    char *rtnstr="";

    if(str==NULL) return rtnstr;
    char *ObjProperty[8]={"A","B","C","D","O","x","y"};   //坐标对象
    char *objn, *objs,*obja;
    sscanf(str,"%[^,],%[^,],%[^#]",&objn,&objs,&obja);
    sprintf(CurPoint,"%s",&objn);
    sprintf(CurAxis,"%s",&objs);
    CurMove = (int)&obja;
    rtnstr=CurPoint;

    //目前为止正常
    if(strcmp(ObjProperty[0],CurPoint)==0){
        Wx=Ax;
        Wy=Ay;
    }
    if(strcmp(ObjProperty[1],CurPoint)==0){
        Wx=Bx;
        Wy=By;
    }
    if(strcmp(ObjProperty[2],CurPoint)==0){
        Wx=Cx;
        Wy=Cy;
    }
    if(strcmp(ObjProperty[3],CurPoint)==0){
        Wx=Dx;
        Wy=Dy;
    }
    if(strcmp(ObjProperty[4],CurPoint)==0){
        Wx=Ox;
        Wy=Oy;
    }
    //目前为止都正常,可是无法将移动步长加入到所确定的目标坐标中,
    if(Wx>0 && Wy>0 && abs(CurMove)>0){
        if(strcmp(ObjProperty[5],CurAxis)==0){
            //Wx = Wx+CurMove; //出问题的地方
        }
        if(strcmp(ObjProperty[6],CurAxis)==0){
            //Wy = Wy+CurMove;   //出问题的地方
        }
    }
    return rtnstr;
}

请问:

1、为什么坐标Wx和Wy不能修改?使用常数Wx = Wx+1都不行。我该如何修改?

2、我的变量定义是否有问题?如果将开始的三个变量char CurPoint[2], CurAxis[2],int CurMove不是定义成public,

而是在函数中定义的话,我的后续过程连坐标点都找不到,且程序会崩溃。为什么?

谢谢了!

  • 写回答

3条回答 默认 最新

  • 体育佬 2019-08-27 13:47
    关注

    虽然挨批,但还是有所收获,我知道大有可能这里面有些不规范。先不管代码合不合理,总算是能达到目的了。

    char* Timer::splitmsg(char* str){
    //传过来的字符串格式:(A,x,-1)或(D,y,0)或(B,y,12)
    char* rtnstr=str;
    if(str==NULL) return rtnstr;
    
    char objn[4]="", objs[4]="";
    int steps=0;
    sscanf(str,"%1s,%1s,%d",objn,objs,&steps); //一个字符:1s
    
    //测试获得的字符重组串
    /*
    char test[16];
    sprintf(test,"%s:%s:%d",objn,objs,steps);
    char *p = test;
    return p;
    */
    
    
    switch(objn[0]){
        default:break;
        case 'A':
            if(objs[0]!=NULL && steps!=NULL){
                switch(objs[0]){
                case 'x':
                    Ax=Ax+steps;
                    break;
                case 'y':
                    Ay=Ay+steps;
                    break;
                }
            }
            Wx=Ax;
            Wy=Ay;
            break;
        case 'B':
        ..........
        ..........
        }
        }
    
    
    

    看来还是得从基础开始了。多谢前面两位了!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。