使用WHILE循环的直角三角形的C ++代码

时间:2011-08-26 20:12:47

标签: c++ while-loop

我需要打印这个三角形:

*
**
***
****
*****
******
*******
********

使用FOR和WHILE循环。我需要帮助,我已经想出了for循环版本我只需要将它转换为while循环,但我尝试的一切都没有给我正确的输出!任何帮助表示赞赏!

到目前为止我的代码:

#include <iostream>
using namespace std;
int main(int argc, char**argv) {

    int i = 1;
    int j = 1;
    int N = 8;

    while (i <= N)
    {
        i = i++;
        while(j <= i)
        {
            cout<<"*";
            j = j++;
        }
        cout<<endl;
    }
}

6 个答案:

答案 0 :(得分:3)

我会给你一个提示(为了让你自己弄清楚):你忘了在内循环之后将j设置回1

就像现在一样,当j变为<= i一次时,它会保持这种状态,并且永远不会再输入内部循环。


此外,虽然它与您的问题没有直接关系,但请确保从不执行j = j++i = i++;只需j++i++(正如Kshitij Mehta在评论中所说)。如果您对原因感兴趣,可以read this question and its answers

答案 1 :(得分:1)

我也会给你一个提示:i = i++;没有按照你的想法做到。

答案 2 :(得分:1)

有什么规则?

while (1)
{
    cout << "*" << '\n';
    cout << "**" << '\n';
    cout << "***" << '\n';
    cout << "****" << '\n';
    cout << "*****" << '\n';
    cout << "******" << '\n';
    cout << "*******" << '\n';
    cout << "********" << '\n';

    break;
}

答案 3 :(得分:0)

我看不到你的三角形,但我认为你需要在j上的每个循环之前将j设置为1:

while (i <= N)
{
    i++;
    j = 1;
    while(j <= i)
    {
        cout<<"*";
        j++;
    }
    cout<<endl;
}

答案 4 :(得分:0)

我真的不知道如何使它更简洁:

#include <iostream>
#include <sstream>

int main()
{
    std::stringstream ss;
    int i = 10;
    while (i--)
        std::cout << (ss<<'*', ss).str() << std::endl;
}

或循环,减少一行

for(int i=10; i--;)
        std::cout << (ss<<'*', ss).str() << std::endl;

如果你不介意一些效率较低的代码:

#include <iostream>
int main() { for(int i=1; i<10; std::cout << std::string(i++, '*') << std::endl); }

答案 5 :(得分:-1)

#include <iostream>   

using namespace std;    

int main() 
{
    int i, j, N=7;  
    while(i <= N)
    {  
        i++;  
        j = 1;  
        while(j <= i)
        {
            cout << "*";  
            j++;
        }
        cout << endl;  
    }  
}