用C ++打印*模式

时间:2013-03-09 15:26:22

标签: c++

我正在尝试打印这样的模式

*******
*     *
*     *
*     *
*     *
*     *
*******

在这里,它应该看起来像一个空盒子。 但不知怎的,我没有更接近

到目前为止我编码了

#include <iostream>
using namespace std;

int main( int argc, char ** argv ) {
for(int i=1;i<=7;i++)
{
    for(int j=1;j<=7;j++)
    {
        if(j==1||j==7)
        printf("*");
        else printf(" ");
    }

    printf("\n");
}
return 0;
}

我的输出是

*     *
*     *
*     *
*     *
*     *
*     *
*     *

只有循环

才会好

15 个答案:

答案 0 :(得分:11)

if(j==1||j==7)
printf("*");
else printf(" ");

此逻辑适用于除第一个和最后一个之外的所有行。因此,您必须考虑行值并对第一行和最后一行进行特殊检查。这两个没有空格。

[假设这是一个家庭作业,我只是给了一个提示。你几乎已经完成了它,上面的提示应该足以使这个工作。]

答案 1 :(得分:6)

您的if条件只需要:

if (i==1 || i==7 || j==1 || j==7)

也就是说,您需要检查您是在第一行还是最后一行以及第一列还是最后一列,然后打印*

答案 2 :(得分:2)

您需要在第一行和最后一行中采取不同的行为:

int W = 7, H = 7;
for(int i=0;i<=H;i++)
{
  for(int j=0;j<=W;j++)
  {
     // if row is the first or row is the last or column is the first of column is the last
     if (i == 0 || i == H-1 || j == 0 || j == W-1)
       printf("*");
     else printf(" ");
  }

  printf("\n");
}

答案 3 :(得分:2)

你非常接近。问题出在这一行:

    if(j==1||j==7)

更改它以便它还考虑顶行和底行。

祝你好运

答案 4 :(得分:1)

此功能可以正常工作:

#include <iostream>
#include <string>

void printBox(int width, int height) {
    if (width < 2 or height < 1) return;
    for (int i = 1; i <= height; i++) {
        if (i == 1 or i == height) {
            std::string o(width, '*');
            std::cout << o << std::endl;
        } else {
            std::string o(width-2, ' ');
            o = '*' + o + '*';
            std::cout << o << std::endl;
        }
    }
}

可以用作:

printBox(2, 2);

打印:

**
**

或者作为:

printBox(6, 4);

打印:

******
*    *
*    *
******

答案 5 :(得分:1)

由于我不是编程方面的专家,我想出了这个简单的代码:

#include <stdio.h>

int main(void)
{
    int i,j,k,n;

    printf("Enter no of rows : \n");
    scanf("%d", &n);

    for(i=0; i<n; i++)
    {
        if(i == 0 || i == (n-1))
        {
            for(j=0; j <n-1; j++)
                printf("*");
        }              
        else
        {
            for(k=0; k<n; k++)
            {
                if (k == 0 || k == (n-2))
                    printf("*");
                else
                    printf(" ");
            }
        }

        printf("\n");
    }

    return 0; 
}

答案 6 :(得分:1)

for(int j=1;j<=7;j++)
{
    if(j==1||j==7)
        printf("*******\n");
    else
        printf("*     *\n");
}

printf("\n");

答案 7 :(得分:0)

您正在平等对待所有行,并忽略必须以不同方式处理第一行和最后一行的事实。你需要像

这样的东西
if (i == 1 || i == 7)
{
    for (j=1;j<7;j++) printf("*");
    printf("\n");
}
else { /* your routine */ }

答案 8 :(得分:0)

这就是你的代码应该是这样的:

#include <iostream>
using namespace std;

int main( int argc, char ** argv ) {
for(int i=1;i<=7;i++)
{
    for(int j=1;j<=7;j++)
    {
        if(j == 1 || j == 7)
           printf("*");
        else if (i == 1 || i == 7 ) //added this check
             printf ("*");
        else printf(" ");
    }



    printf("\n");
}
return 0;
}

Live example

答案 9 :(得分:0)

你需要一个嵌套循环。因为你有两个选项,你需要两个嵌套循环。一个用于空格,一个用于在迭代1和7(0和6)中填充'*'。

用'*'打印第1行和第7行,填充边界星。 使用

if (i == 0 || i == 7)  // in-case you're initializing i with 0
    // loop for printf ("*");

答案 10 :(得分:0)

正如其他人所说,你需要处理第一行和最后一行。构建每一行的一种方法是使用一个字符串构造函数,因此您不需要编写内部循环。

#include <string>
#include <iostream>
using namespace std;

int main()
{
    int height = 7, width = 7;

    for( int i=0; i<height; i++ )
    {
        char c = (i == 0 || i == height-1) ? '*' : ' ';
        string line(width, c);
        line[0] = line[width-1] = '*';
        cout << line << endl;
    }
    return 0;
}

答案 11 :(得分:0)

#include <iostream>
#include<iomanip>
using namespace std;

main()
{
      int Width;
      char MyChar;
      int LCV;    //Loop control
      int LCVC, LCVR;    //Loop control for LCVC=Columns LCVR=Rows

      cout<<"\nEnter Width: "; cin>>Width;
      cout<<"\nEnter a Character: "; cin>>MyChar;

      for (LCV=1;LCV<=Width;LCV++)
      {cout<<MyChar;}
      cout<<endl;
      for(LCVC=1;LCVC<=Width;LCVC++)
      { cout<<MyChar<<setw(Width-1)<<MyChar<<endl;

      }
      for (LCV=1;LCV<=Width;LCV++)
      {cout<<MyChar;}
      cout<<endl;
      system("pause");
}

/*
Enter Width: 6

Enter a Character: #
######
#    #
#    #
#    #
#    #
#    #
#    #
######
Press any key to continue . . .
*/

答案 12 :(得分:0)

打印此图案 输入数字=每个数字,例如23517 **



*


然后               **              的 *           *****                  *        ******* 然后 ** * * * ***** *


和               *               *               *               *               *

答案 13 :(得分:0)

我想出了一个简单的解决方案。您可以使其非常简单,而不是使用以前使用的char数组指针。

#include <iostream>
using namespace std;

int main() {
    int rows = 7;
    for(int i = 1; i<=rows;i++){
        if(i == 1 || i == rows){
            cout<<"*******"<<endl;
        }else{
            cout<<"*     *"<<endl;
        }
    }
    return 0;
}   // This code outputs 7 rows with 7 characters in 1st and 7 line each and 1 each character at the start and last position of the remaining rows

但是,如果您想要自定义行数,则可以尝试以下代码

#include <iostream>
using namespace std;

int main() {
    int rows;
    cout<<"Enter the number of rows: ";
    cin>>rows;  // gets input rows from the user

    for(int i = 1; i<=rows;i++){
        if(i == 1 || i == rows){
            cout<<"*******"<<endl;
        }else{
            cout<<"*     *"<<endl;
        }
    }
    return 0;
}

答案 14 :(得分:0)

您可以添加:

    `if(i==0 || i==6)
    {
    cout<<"*";
    }`