You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++空心菱形打印代码陷入无限循环,请求排查问题原因

排查C++空心菱形上半部分代码的无限循环问题

你的代码陷入无限循环的核心原因是把比较运算符==写成了赋值运算符=,具体出现在第一个嵌套循环的三元表达式里:

原错误代码片段:

for(j=n; j>=1; j--){
    (j=i)?cout<<"* ":cout<<"  ";
}

问题详细解释

这个内层循环的逻辑是for(j=n; j>=1; j--),正常流程是:判断j>=1成立→执行循环体→执行j--。但你在循环体里写的j=i是赋值操作,不是判断j和i是否相等:

  • 每次进入循环体,j都会被强制设置为当前外层循环的i值(i从1到n,始终≥1)。
  • 执行完循环体后j--,j变成i-1,但下一次循环判断j>=1成立时,又会执行j=i把j重置为≥1的数值。
  • 这个过程会无限重复,j永远无法降到1以下,循环永远不会终止。

修正后的代码

把j=i改成j==i,同时调整第二个内层循环的逻辑,确保只打印边缘的星(实现空心效果):

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    for(int i=1; i<=n; i++){
        // 打印左侧空格与行首的星
        for(int j=n; j>=1; j--){
            (j == i)? cout << "* ": cout << "  ";
        }
        // 打印行尾的星,中间填充空格
        for(int j=1; j<i; j++){
            (j == i-1)? cout << "* ": cout << "  ";
        }
        cout << endl;
    }
    return 0;
}

修正逻辑说明

  • 第一个内层循环:当j等于当前行号i时打印星(行首位置),其余位置打印空格,实现左侧的缩进和空心的左边缘。
  • 第二个内层循环:仅当j是当前行的最后一个位置(j=i-1)时打印星(行尾位置),其余位置打印空格,实现空心的右边缘。

内容的提问来源于stack exchange,提问作者Harshit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:42:48