2015-11-01 26 views
-1

我必须创建一个圣诞贺卡,需要包含使用嵌套for循环生成的设计。C++多行文本块

输出需要在所有四边都有一个边框,其中包含可变文本以及嵌套for循环设计。

沿东西这行:

enter image description here

我试图用一个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()

+2

显然我无法在没有登录的情况下查看该图片。也许您需要更改一些设置吗?通常我可以在imgur上看到很好的东西。 – BoBTFish

+0

此外,你的代码甚至不会编译。 (最后一个嵌套'for'循环中'a'和'b'的类型是什么?) – BoBTFish

+0

如果你将你的'tree'数组作为你的输出的确切大小,并预先填充空格,这可能会容易得多。 – usr2564301

回答

0

所以我想解决我的问题。

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

下将存储的边界:

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解决我的问题。

0

问题是你增加了内循环中的计数器。

尝试这样的事:

 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++; 
      //} 
     }