【问题标题】:Why does the program increase the value of the x and the y even after they are bigger, then they should be?为什么程序会增加 x 和 y 的值,即使它们更大了,那么它们应该是?
【发布时间】:2019-12-01 11:19:40
【问题描述】:

我正在制作一个程序,它将一个点从 startx, starty 移动到 endx, endy。 但它连续移动,即使在 x 和 y 大于 endx 和 endy 之后。 代码如下:

int x, y;
            x = startx; y = starty;
            if(startx<goalx){
                if (starty < goaly) {
                    while (startx < goalx || starty < goaly) {
                        x += sqrt(2)*speedx;
                        y += sqrt(2)*speedy;
                    }
                }
                else {
                    while (startx < goalx || starty > goaly) {
                        x += sqrt(2)*speedx;
                        y -= sqrt(2)*speedy;
                    }
                }
            }
            else {
                if (starty < goaly) {
                    while (startx > goalx || starty < goaly) {
                        x -= sqrt(2)*speedx;
                        y += sqrt(2)*speedy;
                    }
                }
                else {
                    while (startx > goalx || starty > goaly) {
                        x -= sqrt(2)*speedx;
                        y -= sqrt(2)*speedy;
                    }
                }


            }
            cout << x << ", " << y << endl;

startx、starty、goalx 和goaly 是用户输入。

【问题讨论】:

  • 您的 else 条件无法正常工作。一个包含循环
  • else属于if。
  • 让我检查一下。请为您的输入指定一些值
  • 因此,如果 startx = 12,starty = 23,goalx = 78 和 goaly = 89,那么它可以工作。但是当 , fe :goally = 22 时,它不会
  • startxgoalxstartygoaly的循环测试值的条件。循环体只改变xy 的值,但从不改变循环条件下测试的变量。因此循环是无限的。

标签: c++ coordinates move infinity


【解决方案1】:

控制结构依赖于startxstarty,但它们永远不会改变。据说应该改用xy

【讨论】:

    【解决方案2】:

    试试这个

    int x, y;
        x = startx; y = starty;
        int xInc = sqrt(2) * speedx;
        int yInc = sqrt(2) * speedy;
        if(x < goalx && y < goaly)
        {
            while(x < goalx || y < goaly)
            {
                x += xInc;
                y += yInc;
            }
        }
        else if(x < goalx && y > goaly)
        {
            while(x < goalx || y > goaly)
            {
                x += xInc;
                y -= yInc;
            }
        }
        else if(x > goalx && y < goaly)
        {
            while(x > goalx || y < goaly)
            {
                x -= xInc;
                y += yInc;
            }
        }
        else if(x > goalx && y > goaly)
        {
            while(x > goalx || y > goaly)
            {
                x -= xInc;
                y -= yInc;
            }
        }
    

    【讨论】:

    • 我最后有一个 'cout
    • 是的,兄弟,你必须初始化 speedx,speedy,goalx,gooley,startx,starty....如果它不起作用,那么共享整个代码而不是代码片段。
    • 整个代码非常非常长...(起点和目标是用户输入)
    • 然后进行调试.. 使用任何调试器,或者在两者之间使用 cout 语句来知道哪里出错了。
    猜你喜欢
    • 2018-06-16
    • 1970-01-01
    • 2016-09-17
    • 2011-09-30
    • 2013-08-11
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多