如何从输出中删除这些多余的箭头?

时间:2019-01-18 23:01:18

标签: c++

编写一个程序,在输入10的情况下显示以下模式。输出从1到10的增加,从10到1的减少。

+

++

+++

++++

+++++

++++++

+++++++

++++++++

+++++++++

++++++++++

++++++++++

+++++++++

++++++++

+++++++

++++++

+++++

++++

+++

++

+

我试图弄乱endl;但我似乎无法弄清楚为什么我要获得多余的空间。

//System Libraries
#include <iostream>  //Input/Output Library
using namespace std;

//User Libraries

//Global Constants, no Global Variables are allowed
//Math/Physics/Conversions/Higher Dimensions - i.e. PI, e, etc...

//Function Prototypes

//Execution Begins Here!
int main(int argc, char** argv) {

    for (int r = 0; r <= 10; r++)
    {
        cout << endl;
        for (int c = 0; c < r; c++)
        {
            cout << "+";
        }
        cout << endl;
    }


    for (int r = 10; r >= 0; r--)
    {
        cout << endl;
        for (int c = 0; c < r; c++)
        {
            cout << "+";
        }
        cout << endl;
    }


    return 0;
}

预期产量

+↵
↵
++↵
↵
+++↵
↵
++++↵
↵
+++++↵
↵
++++++↵
↵
+++++++↵
↵
++++++++↵
↵
+++++++++↵
↵
++++++++++↵
↵
++++++++++↵
↵
+++++++++↵
↵
++++++++↵
↵
+++++++↵
↵
++++++↵
↵
+++++↵
↵
++++↵
↵
+++↵
↵
++↵
↵
+

您的输出

↵
↵
↵
+↵
↵
++↵
↵
+++↵
↵
++++↵
↵
+++++↵
↵
++++++↵
↵
+++++++↵
↵
++++++++↵
↵
+++++++++↵
↵
++++++++++↵
↵
++++++++++↵
↵
+++++++++↵
↵
++++++++↵
↵
+++++++↵
↵
++++++↵
↵
+++++↵
↵
++++↵
↵
+++↵
↵
++↵
↵
+↵
↵
↵

2 个答案:

答案 0 :(得分:0)

在上部双循环中,...

  • 首先,c循环不会在r==0时进行迭代,因此您会得到双换行符↵↵

  • 接下来,当时,在c循环之前,您又得到一个r==1

在下面的双循环中,...

  • 最后,c循环不会在r==0时进行迭代,因此您会得到双换行符↵↵

因此,您应将r的最小值替换为1,并避免在下部双循环中的r==1时输出换行符,如下所示:

DEMO

#include <iostream>

int main() 
{
    for (int r = 1; r <= 10; ++r)
    {
        for (int c = 0; c < r; ++c)
        {
            std::cout << "+";
        }
        std::cout << std::endl << std::endl;
    }

    for (int r = 10; r > 0; --r)
    {
        for (int c = 0; c < r; ++c)
        {
            std::cout << "+";
        }

        if(r != 1){
            std::cout << std::endl << std::endl;
        }
    }

    return 0;
}

答案 1 :(得分:0)

我们第一次进入第一个循环r = 0,进入内部循环c=0。 在这种情况下,不满足内部循环的条件,因此仅两个endl的第一状态在内部循环的开始和结束处执行。 要更正,您必须置于第二个循环条件int c = 0; c <= r; c++中。 在这种情况下,您需要将第一个循环的条件固定为int r=0; r<10; r++

u可以看到此for循环图:for_loop_diagram

更正的代码:

int main(int argc, char** argv) {

    for (int r = 0; r < 10; r++)
    {
        cout << endl;
        for (int c = 0; c <= r; c++)
        {
            cout << "+";
        }
        cout << endl;
    }


    for (int r = 10; r > 0; r--)
    {
        cout << endl;
        for (int c = 0; c <= r; c++)
        {
            cout << "+";
        }
        cout << endl;
    }


    return 0;
}