我的 for 循环有更好更短的方法吗?

时间:2021-03-01 10:27:02

标签: c++ for-loop

我是这里的新手,这是我的第一个问题。我在 Visual Studio 2019 上学习了基本的 C++。我学习了函数和循环。

I have a homework that wants print:

我用我的 30 行代码解决了这个问题。但我只是想知道有没有更短更好的方法?

using namespace std;
int main() 
{   
        for (int j = 0; j < 5; j++)
        {
            if (j == 1)
                break;
            cout << "*";
            cout << endl;
            if (j == 2)
                break;
            cout << "**";
            cout << endl;
            if (j == 3)
                break;
            cout << "***";
            cout << endl;
            if (j == 4)
                break;
            cout << "****";
            cout << endl;
            if (j == 5)
                break;
            cout << "*****";
            cout << endl;
        }
    return 0;
}

4 个答案:

答案 0 :(得分:6)

您在代码中犯了几个错误。

  • break 语句实际上应该是 continue 语句。 break 完全终止整个循环(即,您提供的代码中绝对不会打印任何内容)。
  • i == 5 永远不可能是 true,因为循环在它发生之前终止(参见条件 i < 5)。

要回答您的问题,您可以使用嵌套循环。

for (int i = 0; i < 5; i++) {
    for (int j = 0; j <= i; j++) {
        std::cout << '*';
    }
    std::cout << std::endl;
}

或者,如果您不需要灵活,请手动操作。

std::cout << "*\n**\n***\n****\n*****" << std::endl;
        

答案 1 :(得分:4)

为什么是循环?下面是七行代码的相同逻辑:

int main() {
    std::cout << "*\n";
    std::cout << "**\n";
    std::cout << "***\n";
    std::cout << "****\n";
    std::cout << "*****\n";
}

老实说,这可能是最简短的了(除了将所有输出塞进一个语句中)。

但是你的循环的问题主要不是它的长度,而是你的循环不是可变的:一旦你改变迭代次数,它就无法工作,这违背了目的。所有逻辑都是硬编码的,这使得循环毫无用处。

但是如果你想使用循环,那么打印星星的逻辑是可配置的:

void print_stars(int n) {
    for (int i = 0; i < n; ++i) {
        std::cout << "*";
    }
    std::cout << "\n";
}

int main() {
    for (int i = 0; i < 5; ++i) {
        print_stars(i + 1);
    }
}

答案 2 :(得分:3)

#include<iostream>
using namespace std;


int main(){
    for(int i = 1;i <= 5;i++){
        for(int j = 1;j <= i;j++){
            cout<<"*";
        }
        cout<<"\n";
    }
}

答案 3 :(得分:1)

void printTrignleL(size_t n)
{
    for (size_t i = 0; i < n; ++i) {
        std::cout << std::string(i + 1, '*') << '\n';
    }
}
相关问题