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

C++菱形星号数组代码问题:星号数量跳变与输入合法性需求

菱形星号生成问题修复与输入验证实现

星号数量跳变的修复

原代码中控制星号数量的循环条件为2 * i - 1,这会让星号数按**1、3、5...**的奇数序列增长,不符合你需要的1→2→3→4→5→4→3→2→1的顺序。只需将星号循环的终止条件改为i,即可让每行星号数等于当前行数i。

同时,原代码的空格计算逻辑是针对奇数星号的对称菱形,要匹配你提供的右对齐输出效果,需调整前置空格的数量:将空格循环的终止条件改为2*n - i,确保整体呈现右对齐的菱形布局。

输入验证实现(仅接受正整数)

原代码未处理非数字输入,若输入特殊字符会导致程序进入错误状态。添加以下逻辑可实现输入验证:

  • 检查输入流状态,若输入失败则清空错误标记
  • 忽略输入缓冲区中的无效字符,直到换行
  • 提示用户重新输入有效正整数

需引入<limits>头文件以使用numeric_limits工具类。

完整修复代码

#include <iostream>
#include <limits>

using namespace std;

int main() {
    int n;
    cout << "Enter a number: ";
    // 输入验证:仅接受正整数
    while (!(cin >> n) || n <= 0) {
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Invalid input! Please enter a positive integer: ";
    }

    // 生成菱形上半部分
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= 2*n - i; j++) {
            cout << " ";
        }
        for (int j = 1; j <= i; j++) {
            cout << "*";
        }
        cout << endl;
    }

    // 生成菱形下半部分
    for (int i = n - 1; i >= 1; i--) {
        for (int j = 1; j <= 2*n - i; j++) {
            cout << " ";
        }
        for (int j = 1; j <= i; j++) {
            cout << "*";
        }
        cout << endl;
    }

    return 0;
}

测试输出(输入5时)

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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:35:18