C++

调试程序中最容易出错的点

调试程序中最容易出错的点

尽量用变量来变化参数,而不是具体整数,否则修改代码的时候,很容易修改某个参数

一、命名重复,导致不可预知的逻辑错误

二、循环逻辑出错(最好在循环中加一个index以便修改调试;嵌套循环时注意相关语句的位置,是在小循环还是大循环)

对于循环比较复杂的,尤其是嵌套循环这种,当出现错误的时候,仔细从一开始一步一步去推导循环的执行过程,看有没有逻辑出错、变量赋值等错误。
最好在循环中加一个index,后续根据index的值判断循环经过了多少次或根本就没有进入循环,据此作出相应的动作。

比如:程序中,有一个变量在小循环内从0不断加1,而此次小循环结束后,大循环中接着循环了一次,又回到了小循环中再次叠代时,这时候就要注意这个变量的值是不是又重新从0开始往上加1。
(这里很容易出错的点在于:容易没有在小循环中加一个对该变量的赋值语句,结果就会导致该变量从从0一直往上加,每次小循环过后再执行该小循环时,该变量基于的是上一次小循环加完之后的结果不断加1的)

%Index through a grid in X-Y plane.
%matlab索引必须为正数
for  j=0:60
for i=0:60

%XY平面x、y点的坐标位置(相对中心的偏移,初始在中心)
x(i+1,j+1)=(i-30)*10;
y(i+1,j+1)=(j-30)*10;

%===================================
%******************************************************
%此处之前转换矩阵x1,y1,z1都变化了,需要重新初始化
T1(1,4)=0; T1(2,4)=0;T1(3,4)=965.5;
%x,y平移后,转换矩阵的变化(此时z方向还未开始变化)
T1(1,4)=T1(1,4)+x(i+1,j+1);%此处不能用x1=x1+x(i+1,j+1);x1等变量虽然变了,但是T1中的x1,y1等却没变化(感觉matlab这点很是奇怪)
T1(2,4)=T1(2,4)+y(i+1,j+1);

%上平台各点在静坐标系中的坐标
BB1=T1*BP;
%计算杆长
L=zeros(1,6);
for k=1:1:6
L(k)=sqrt((BB1(1,k)-AP(1,k))^2+(BB1(2,k)-AP(2,k))^2+(BB1(3,k)-AP(3,k))^2);%计算杆长
end

za=0;

% While conditions are satisfied such that current point is in the workspace increment za.
while (L(1)<Lmax && L(2)<Lmax && L(3)<Lmax && L(4)<Lmax && L(5)<Lmax && L(6)<Lmax)
za=za + 1;%z方向变化10mm进行增长
T1(3,4)=965.5;
T1(3,4)= T1(3,4)+za;
%上平台各点在静坐标系中的坐标
BB1=T1*BP;
%计算杆长
for m=1:1:6
L(m)=sqrt((BB1(1,m)-AP(1,m))^2+(BB1(2,m)-AP(2,m))^2+(BB1(3,m)-AP(3,m))^2);%计算杆长
end  
end
z(i+1, j+1)=za-1;
disp(x(i+1, j+1));
disp(y(i+1, j+1));
disp(z(i+1, j+1));
end
end

三、表达不等式关系时,中间用&&相连