#include iostream #include string using namespace std; int main() { int n; // 输入校验只能输入1~19整数拦截小数、字母 while (true) { cout 请输入正六边形边长(1~19); cin n; if (!cin) { cin.clear(); cin.ignore(1000, \n); cout 输入错误不能输入字母/符号\n\n; continue; } char temp; if (cin.get(temp) temp ! \n) { cin.ignore(1000, \n); cout 输入错误不能输入小数\n\n; continue; } if (n 0 n 20) break; cout 输入错误边长范围1~19\n\n; } // 上半部分 n 行 for (int i 0; i n; i) { // 前置空格n-1-i整体居中 cout string(n - 1 - i, ); if (i 0) { // 首行连续n个星号 cout string(n, *); } else { // 左右各1个*中间空白 2*i - 1 cout * string(2 * i n-2, ) *; } cout endl; } // 下半部分 n-1 行倒序不包含首尾满行星 for (int i n - 2; i 1; i--) { cout string(n - 1 - i, ); cout * string(2 * i n-2, ) *; cout endl; } // 最后一行底部满星 cout string(n - 1, ) string(n, *) endl; return 0; }