【问题标题】:C++ multiline text blocks [closed]C ++多行文本块[关闭]
【发布时间】:2015-11-01 11:08:35
【问题描述】:

我要创建一种圣诞贺卡,其中需要包含使用嵌套 for 循环生成的设计。

输出需要在所有四个边上都有一个边框,里面有可变文本以及嵌套的for循环设计。

类似这样的事情:

我尝试使用 for 循环生成边框并将设计放入其中,但在打印多行设计时出现了问题。

#include <iostream>
#include <iomanip>

using namespace std;

int main(){
    char tree[10][10];
    int i,j;

    for(i=0; i<7; i++){
        for(j=0; j<7; j++){
            if(i==0 && j==3){
                // cout << '*';
                tree[i][j] = '*';
            }
            else if(i==1 && j==3){
                //   cout << '|';
                tree[i][j] = '|';
            }
            else if(i==2 && j==3){
                //   cout << 'M';
                tree[i][j] = 'M';
            }
            else if(i==3 && j>1 && j<5){
                //   cout << 'A';
                tree[i][j] = 'A';
            }
            else if(i==4 && j>0 && j<6){
                if(j % 2 == 0){
                    //          cout << 'o';
                    tree[i][j] = 'o';
                } else {
                    //    cout << 'A';
                    tree[i][j] = 'A';
                }
            }
            else if(i==5){
                if(j % 2 == 0){
                    //       cout << 'A';
                    tree[i][j] = 'A';
                } else {
                    //     cout << '~';
                    tree[i][j] = '~';
                }
            }
            else if(i==6 && j==3){
                //   cout << "M";
                tree[i][j] = 'M';
            }
            else {
                //   cout << ' ';
                tree[i][j] = ' ';
            }
        }
        tree[i][7] = '\n';
    }

    tree[6][8] = '\0';

    for(i=0; i<30; i++){
        for(j=0; j<70; j++){
            if(i==0 || i==29){
                cout << "^";
            } else if(j==0 || j==69){
                cout << "*";
            }
            int a,b;
            if(j>=42 && j<50 && i >= 10 && i< 17){
                for(a=0; a<7; a++){
                    for(b=0; b<8; b++){
                        cout << tree[a][b];
                        j++;
                    }
                    i++;
                }
            }

            else {
                cout << " ";
            }
        }
        cout << endl;
    }

    return 0;
}

这会将整个边框向下推,因为设计是多行的。

我对这种方法有点困惑。也许使用setw()

【问题讨论】:

  • 显然我无法在没有登录的情况下查看该图像。也许您需要更改一些设置?通常我可以在 imgur 上看到东西。
  • 另外,您的代码甚至无法编译。 (最后一个嵌套的for循环中ab的类型是什么?)
  • 如果您将 tree 数组设置为输出的确切大小并用空格预填充它,这可能会容易得多。
  • 哦该死的。道歉。原来的代码有很多cmets,所以我把a和b都剪掉了,试图清理一下。修复了 imgur 链接。

标签: c++ for-loop ascii-art setw


【解决方案1】:

问题在于您增加了内部循环中的计数器。

试试这样的:

        if (j >= 42 && j<50 && i >= 10 && i< 17) {
            //for (auto a = 0; a<7; a++) {
                //for (auto b = 0; b<8; b++) {
                    cout << tree[i - 10][j -42];
                    //j++;
                //}
                //i++;
            //}
        }

【讨论】:

    【解决方案2】:

    所以我想出了一个解决问题的办法。

    我将输出存储在二维字符数组中,而不是直接打印到标准输出。

    以下将存储边框:

     for(i=0; i<50; i++){
       for(j=0; j<70; j++){
           if(i==0 || j==0 || i==49 || j==69){
              finalOutput[i][j] = '*'; //Just for the sake of an example
           } else {
              finalOutput[i][j] = ' ';
           }
       }
     }
    

    以下内容会将树存储在盒子内的某个位置,

     for(i=30; i<7; i++){
        for(j=30; j<7; j++){
           finalOutput[i][j] = tree[i-30][j-30];
        }
     }
    

    然后打印 finalOutput 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2011-02-13
      • 2021-04-20
      相关资源
      最近更新 更多