2015-11-01 2 views
-1

Я должен создать своего рода рождественскую поздравительную открытку, которая должна включать проекты, созданные с использованием вложенных циклов.Многострочные текстовые блоки C++

Выход должен иметь границу со всех четырех сторон с переменным текстом внутри вместе с проектами вложенных циклов.

Что-то вдоль линий этого:

enter image description here

Я попытался использовать для цикла для создания Пограничных пута конструкции внутри, но возникла проблема при печати многострочных конструкций.

#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

Кроме того, ваш код даже не компилируется. (Каковы типы 'a' и' b' в последнем вложенном цикле 'for'?) – BoBTFish

+0

Это, вероятно, будет намного проще, если вы создадите массив' tree' точного размера вашего вывода и предварительно заполните его пробелами. – usr2564301

ответ

0

Таким образом, я понял, решение моего вопроса.

Вместо того, чтобы печатать непосредственно в stdout, я сохраняю вывод в массиве 2D char.

Следующая будет хранить границу:

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++; 
      //} 
     } 
Смежные вопросы