C++ 字符画框:修复代码并美化输出

你提供的代码段旨在创建一个由星号 (*) 组成的边框,并在其中显示一条问候语。然而,代码存在一些问题,需要进行修复和优化。

问题和解决方案

  1. 头文件包含: <iostream> 头文件应该用尖括号 <> 包含,而不是双引号 ""cpp #include <iostream>

  2. 命名空间: using 声明应该放在全局作用域,而不是 main 函数内部,以便在整个程序中使用。 cpp using std::string; using std::cout; using std::cin; using std::endl; int main() { // ... }

  3. 冗余的 endl: 在提示用户输入 padding 行数时,语句 '请输入你要的padding行数<<endl' 中有一个多余的 << endl。应该删除一个 <cpp cout << '请输入你要的padding行数:' << endl;

  4. 计算 cols: 计算 cols(列数)的值时,应该将 greeting.size() 更改为 greeting.size() + padding * 2,因为 padding 应该添加到问候语的两侧。 cpp const string::size_type cols = greeting.size() + padding * 2 + 2;

  5. 缺少 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;}

这段修复后的代码解决了原代码中的问题,并创建了预期的字符画框输出。

C++ 字符画框:修复代码并美化输出

原文地址: https://www.cveoy.top/t/topic/wuS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录