2016-07-27 89 views
0

我想知道如何记录变化的变量的以前的值。此问题的一个示例如下:记录变量的值

int distanceFormula(int x1, int x2, int y1, int y2){ 
    int distance; 
    distance = sqrt(pow((x1-x2), 2) + pow((y1-y2), 2)); 
    return distance; 
} 

int main(){ 
    for(int i = 0; i < 2; i++){ 
    int x = rand() % 180; 
    int y = rand() % 180; 
    int x2 = rand() % 180; 
    int y2 = rand() % 180; 

    int distance = distanceFormula(x, x2, y, y2); 
    int priordistance = distanceFormula(x, x2, y, y2); 

    if(priordistance != distance){ 
     cout<<"Yes! It worked!"<<endl; 
    } 
    } 
    return 0; 
} 

该代码本身不会返回“是!它工作!”如何记录先前的距离值,然后将之前的值与当前值进行比较?

编辑: 感谢您的快速评论!真的很感激它。

要澄清实际问题,上面的代码只是一个快速的模板/示例。由于距离值会在第二个回路周围发生变化,因此如何记录距离的第一个值并将该值设置为priordistance,然后将距离的当前值与priordistance进行比较(其值实际上只是前一个距离值) 。

+0

定义'for'环路范围以外的'priordistance'变量? –

+0

您使用相同的参数调用'distanceFormula'函数两次,所以它会得到相同的结果。为什么会输出'是的!它的工作!'? – Polb

回答

0

只需将变量中的前一个值重新编号。

#include <cmath> 
#include <cstdlib> 
#include <iostream> 
using std::cout; 
using std::endl; 

int distanceFormula(int x1, int x2, int y1, int y2){ 
    int distance; 
    distance = sqrt(pow((x1-x2), 2) + pow((y1-y2), 2)); 
    return distance; 
} 

int main(){ 
    int priordistance = 0; // a variable used to record the value 
    for(int i = 0; i < 2; i++){ 
    int x = rand() % 180; 
    int y = rand() % 180; 
    int x2 = rand() % 180; 
    int y2 = rand() % 180; 

    int distance = distanceFormula(x, x2, y, y2); 
    if(i > 0 && priordistance != distance){ // use i > 0 to avoid compareing with meaningless value 
     cout<<"Yes! It worked!"<<endl; 
    } 
    priordistance = distance; // record the value 
    } 
    return 0; 
} 
0

有几种方法可以做到这一点...您可以在for循环之外定义priordistance,并且一定要重新定义它1次(因为循环了两次)。

然而,这不是我会做什么,我会简单地创建持有“距离”的n个供大家参考由索引i

int[] or int * 
0

你可以做各种事情整数数组。您需要保留整个for循环的价值。请注意,在比较之前没有任何意义,直到您已获得一个先前值。

int main(){ 
    int priordistance = 0; //lifetime outside for loop 
    for(int i = 0; i < 2; i++){ 
    int x = rand() % 180; 
    int y = rand() % 180; 
    int x2 = rand() % 180; 
    int y2 = rand() % 180; 

    int distance = distanceFormula(x, x2, y, y2); 

    if(i && priordistance != distance){ 
    //^---- have we got a prior value yet? 
     cout<<"Yes! It worked!"<<endl; 
    } 
    priordistance = distance;//remember for next time 
    } 
    return 0; 
} 
+0

我很高兴见到你:) –

+0

而且:-) – doctorlove

0

你的意思是像下面这样的东西吗?

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include <cmath> 

int distanceFormula(int x1, int x2, int y1, int y2) 
{ 
    int distance; 

    distance = std::sqrt(std::pow(x1 - x2, 2) + std::pow(y1 - y2, 2)); 

    return distance; 
} 

int main() 
{ 
    const size_t N = 2; 
    int distance[N]; 

    std::srand((unsigned int)std::time(nullptr)); 

    for (size_t i = 0; i < N; i++) 
    { 
     int x = rand() % 180; 
     int y = rand() % 180; 
     int x2 = rand() % 180; 
     int y2 = rand() % 180; 

     distance[i] = distanceFormula(x, x2, y, y2); 
    } 

    if (distance[0] != distance[1]) std::cout << "Yes! It worked!" << std::endl; 

    return 0; 
} 

程序输出是

Yes! It worked!