如何在c ++中获得沙漏模式

时间:2016-10-08 01:22:21

标签: c++

我一直试图获得这种沙漏模式,现在已经有一段时间了,我一直坚持如何继续,它要求用户在顶行输入#的数量并指出行数。如果#的数量小于3,则会输出错误消息。如果行数小于1,则无效或者小于2'#'。

无论如何,如果我为顶行输入7,为行数输入3,我会继续获得此模式。

7#位于顶部

下一行中的#5

下一行3#

下一行3#

下一行中的#5

下一行7#

我不需要其中一个有3#的行,但我似乎无法摆脱它。

无论如何,这是我的代码:

   // Declare and initialize variables

    int topRow(0);
    int row(0);
    int i(0);
    int k(0);
    int j(0);


  // Repeatedly prompt for top row size until valid value is entered

cout << "Enter size of the top row: " ;
cin >> topRow;

    while(topRow < 3)
    {
    cout << "Size of the top tow must be at least three." << endl;
    cout << "Enter size of the top row again: "; 
    cin >> topRow;
    }


  // Repeatedly prompt for the number of rows until valid value is entered

cout << "Enter number of rows: ";
cin >> row;

    while(row == 0 || topRow/row < 2.0  || row < 1.0 )
    {
    cout << "Invalid number of rows." << endl;
    cout << "Enter number of top row again: "; 
    cin >> row;
    }


  // Print the hour glass
cout << endl;

    for (i=1; i < topRow ; i++)
    {
        if (i <= row )
        {   for (j=1; j <= i-1; j++)
            { 
            cout << " ";
            }
            for (k=1; k <= topRow - (i*2 - 2) ; k++)
            {
            cout << "#";
            }
            cout << endl;
        }
        else 
        {   
            for (j = row ; j >= i - (row - 1); j--)
            {
                cout << " ";
            }
            for (k = row ; k >= topRow - (i*2 - 2); k--)
            {
               cout <<"#";
            }
            cout << endl;
        }
}

  // end program
  return 0;

1 个答案:

答案 0 :(得分:1)

您可以在沙漏的后半部分的第一次迭代中添加一个检查。如果

虽然很乱,但是想要这样:

static bool first = true;
if (first) {
  first = false;
} else {
  // ... second print code
}

7和3的输入现在是:

#######
 #####
  ###
 #####
#######

如果您希望其他输入格式正确,则会出现更大的问题 我建议你重做你的算法。