2015-11-01 62 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++; 
      //} 
     }