如何在C++中使用单个循环打印直角三角形 故障代码求排查
问题排查与修复
现有代码存在的问题
- 语法错误:第二个
if分支中star变量后缺少赋值语句和分号,代码无法正常编译 - 循环次数不足:当前循环仅执行n次,而打印n行直角三角形总共需要输出
n*(n+1)/2个星号加n个换行,远大于n次循环,不可能完成需求 - 逻辑错误:第一个
if分支只要star < n就持续打印星号并触发continue,会直接在一行内打印出n个星号,完全没有换行逻辑,无法输出多行三角结构
正确的单循环实现代码
while循环版本
#include<iostream> using namespace std; int main() { int n; cin >> n; int cur_line = 1; // 当前要打印的行号 int cur_star = 0; // 当前行已经打印的星数 // 循环持续到打印完第n行为止 while(cur_line <= n) { if(cur_star < cur_line) { cout << "*"; cur_star++; } else { // 当前行星数打满,换行,切到下一行 cout << endl; cur_line++; cur_star = 0; } } system("pause"); return 0; }
for循环版本
#include<iostream> using namespace std; int main() { int n; cin >> n; // 循环总次数等于所有行的星数总和 for(int i=1, line=1; i<=n*(n+1)/2; i++) { cout << "*"; // 每打满当前行对应的星数就换行 if(i == line*(line+1)/2) { cout << endl; line++; } } system("pause"); return 0; }
内容的提问来源于stack exchange,提问作者Omi
相关产品推荐
相关产品推荐

