extern char chuan[30000]; //此为存储G的全局数组
void gdaima2(void) //G代码处理函数名
{
int a,b,c;
char *sb,*sb2;
char temp[] = "-13333";
char buf[] = "45436"; // 定义两个缓存数组,初始化随意定义,但长度要够
int n,n1; // 定义N后面的数值
int g; //定义G后面的数值
float x1,y1,z1,x,y,z,i,j; //定义各个参数
int s=0; // 定义转向参数
n1=n=0;
g=0;
x1=x=y1=y=z1=z=j=i=0; //初始化参数
//printf("中国地质大学黄元冰
%s
",buf); //第一次用串口输出无意义值以消除错误输出值
sb = & chuan[0]; //char为存放G代码的首地址
for(a=0;a<strlen(chuan);a++)
{
if(64<chuan[a]&&chuan[a]<91) //判读进入字母环节
{
switch(chuan[a]) //判读出现的字母类型并保存其后面是参数到对应的变量
{
case 'N':
{
a++; // 同时从N进入下一个数字
sb=&chuan[a];
c=a; //保存a 的起始位置
sb2=sb; //保留原始位置
for ( ;chuan[a]!=' '; ) //N后面的数值位置加到sb 到达空格
{
sb++;
a++;
}
b=sb-sb2; //计算有效char的长度
for (c=0;c<=b;c++) //把 N后面的数值提出并化为整数
{
temp[c]=*sb2; //把有效数值转移到temp中
sb2++;
}
printf("输出N1temp
%d
",atoi(temp));
n=atoi(temp); //调用atoi 函数 将他转换为int型
printf("输出N
%d
",n);
sb++; // 保证与a前进步伐一致
}
break;
case 'G':
{
a++;
sb=&chuan[a];
c=a;
sb2=sb;
for ( ;chuan[a]!=' '; )
{
sb++;
a++;
}
b=sb-sb2;
for (c=0;c<=b;c++)
{
temp[c]=*sb2;
sb2++;
}
printf("输出G1temp
%d
",atoi(temp));
g=atoi(temp);
printf("输出G
%d
",g);
sb++;
}
break;
case 'X':
{
a++;
sb=&chuan[a];
c=a;
sb2=sb;
for ( ;chuan[a]!=' '; )
{
sb++;
a++;
}
b=sb-sb2;
for (c=0;c<=b;c++)
{
temp[c]=*sb2;
sb2++;
}
printf("输出X1temp
%10.4f
",atof(temp));
x=atof(temp);
printf("输出X
%10.4f
",x);
sb++;
}
break;
case 'Y':
{
a++;
sb=&chuan[a];
c=a;
sb2=sb;
for ( ;chuan[a]!=' '; )
{
sb++;
a++;
}
b=sb-sb2;
for (c=0;c<=b;c++)
{
temp[c]=*sb2;
sb2++;
}
printf("输出Y1temp
%10.4f
",atof(temp));
y=atof(temp);
printf("输出Y
%10.4f
",y);
sb++;
}
break;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>