C++ 字符画框:修复代码并美化输出
C++ 字符画框:修复代码并美化输出
你提供的代码段旨在创建一个由星号 (*) 组成的边框,并在其中显示一条问候语。然而,代码存在一些问题,需要进行修复和优化。
问题和解决方案
-
头文件包含:
<iostream>头文件应该用尖括号<>包含,而不是双引号""。cpp #include <iostream> -
命名空间:
using声明应该放在全局作用域,而不是main函数内部,以便在整个程序中使用。cpp using std::string; using std::cout; using std::cin; using std::endl; int main() { // ... } -
冗余的
endl: 在提示用户输入 padding 行数时,语句'请输入你要的padding行数<<endl'中有一个多余的<< endl。应该删除一个<。cpp cout << '请输入你要的padding行数:' << endl; -
计算
cols: 计算cols(列数)的值时,应该将greeting.size()更改为greeting.size() + padding * 2,因为 padding 应该添加到问候语的两侧。cpp const string::size_type cols = greeting.size() + padding * 2 + 2; -
缺少
while循环的闭合大括号:while循环缺少一个闭合大括号}。cpp while (c != cols) { // ... } // <-- 添加闭合大括号
修复后的代码cpp#include
using std::string;using std::cout;using std::cin;using std::endl;
int main() { cout << 'please enter your name: '; string name; cin >> name; string greeting{'hello, ' + name + '!'};
cout << '请输入你要的padding行数:' << endl; int padding{0}; cin >> padding; const int rows{2 * padding + 3}; const string::size_type cols{greeting.size() + padding * 2 + 2};
// invariant: we have written r rows so far for (int r{0}; r != rows; ++r) { string::size_type c{0}; // invariant: we have written c characters so far in this row while (c != cols) { if (r == padding + 1 && c == padding + 1) { cout << greeting; c += greeting.size(); } else { if (r == 0 || r == rows - 1 || c == 0 || c == cols - 1) { cout << '*'; } else { cout << ' '; } ++c; } } cout << endl; }
return 0;}
这段修复后的代码解决了原代码中的问题,并创建了预期的字符画框输出。
原文地址: https://www.cveoy.top/t/topic/wuS 著作权归作者所有。请勿转载和采集!