内部循环中的值在C ++中不会改变

时间:2014-05-25 18:04:52

标签: c++ nested-loops

这是一个似乎不起作用的示例代码。对于所有迭代,我得到相同的X和Y值(它们都等于零)。有人能帮我解决这个错误吗?

#include <iostream>
using namespace std;


int main()
{

     double coord[4][2];
     int div_x, div_y;
     coord[1][0]=2;
     coord[1][1]=0;
     coord[2][0]=2;
     coord[2][1]=4;
     coord[3][0]=0;
     coord[3][1]=4;
     div_x  =  4;
     div_y  =  3;

     double a =0,b=0,c=0,d=0,e=0,f=0,g=0,h=0;
     a = coord[1][0]+coord[2][0]+coord[3][0];
     b = coord[1][0]+coord[2][0]-coord[3][0];
     c = coord[2][0]-coord[1][0]+coord[3][0];
     d = coord[2][0]-coord[1][0]-coord[3][0];
     e = coord[1][1]+coord[2][1]+coord[3][1];
     f = coord[1][1]+coord[2][1]-coord[3][1];
     g = coord[2][1]-coord[1][1]+coord[3][1];
     h = coord[2][1]-coord[1][1]-coord[3][1];

     for (int i=0; i<div_y+1; i++){  // loop all rows (blue)
      for (int j=0; j<div_x+1; j++){  // loop all nodes of one row (green)
        double w = -1 + (2/div_x)*j;
        double s = -1 + (2/div_y)*i;
        double X = (a+b*w+c*s+(w*s*d));
        double Y = (e+f*w+g*s+(h*s*w));
        cout<<"\nX "<<X<<endl;
        cout<<"\nY "<<Y<<endl;
      }
     }
     return 0;
}
.

2 个答案:

答案 0 :(得分:0)

你的问题在于这里的分歧:

double w = -1 + (2/div_x)*j;
double s = -1 + (2/div_y)*i;

2/div_x2/div_y是整数除法。在C ++中划分两个integer类型的值时,除法将作为整数除法执行。由于div_x为4且div_y为3,因此它们的结果均为0.作为整数除法:

2 / 4 = 0
2 / 3 = 0

解决此问题的最简单方法是对两个值中的一个使用double值,这会导致双重除法。例如:

double w = -1.0 + (2.0/div_x)*j;
double s = -1.0 + (2.0/div_y)*i;

您可能还需要考虑使用float类型而不是double,除非您确实需要超过float精度,大约是7位十进制数。

答案 1 :(得分:0)

在您的代码中,div_xdiv_yint,因此(2/div_x)(2/div_y)为整数除法,并评估为0

所以ws都始终等于-1

您可以使用:(2.0/div_x)(2.0/div_y)

强制进行浮动评估