-1

辺の長さを要求し、スターテーブルを出力するテーブルをC++で作成しようとしています。

テーブルが正しく表示されるようにするために私が何をすべきかについて、誰かが私を正しい方向に向けることができますか?

入力:

Enter length of side: 5

必要な出力:

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

これまでのところ、*のマイナス1の最初の行が出力され、入力した数値が表示されます。

#include "main.h"
using namespace std;


    int main () {
      int sideLength;
      cout << "Enter lengh of side: ";
      cin >> sideLength;
      cout.fill('*');
      cout.width(sideLength);
      cout << sideLength << endl;
      return 0;
    }

高度な、ちょうどc++を学ぶことに感謝します

4

3 に答える 3

1

私はまだこのかわいさを十分に得ていません。ひょっとしたら、もっといいものを思いつくかもしれません...

#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
    int size;
    if (std::cin >> size) {
        auto to(std::ostreambuf_iterator<char>(std::cout));
        auto line([=](decltype(to) to){ return std::fill_n(to, size, '*'); });
        auto box([=](decltype(to) to){
                *to++ = '*'; std::fill_n(to, size - 2, ' '); *to++ = '*'; return to;
            });
        *(to = line(to))++ = '\n';
        for (int i(1); ++i < size; ) {
            *(to = box(to))++ = '\n';
        }
        *(to = line(to))++ = '\n';
    }
}
于 2012-09-26T23:48:50.560 に答える
0

側面と底面も印刷するためにループを追加する必要があります。
提案:

for (int i=0; i <= sideLength; i++)  
{
cout<<endl <<"*";
for (int j=0; j < sideLength;j++) 
{
cout<<" ";
cout<<"*";
}
cout.fill('*');

これらの行を cout.fill('*') の後に追加します。
多分それはうまくいくでしょう。

于 2012-09-26T23:38:53.833 に答える
0

あなたはこのようにすることができます:

#include <iostream>
using namespace std;

int main () {
  int sideLength;
  cout << "Enter lengh of side: ";
  cin >> sideLength;

  for (int i = 0; i < sideLength; i++)
    cout<<"*";

  cout<<"\n";

  for (int i = 0; i < sideLength-2; i++) 
  {
    cout<<"*";

    for (int j = 0; j < sideLength-2; j++)
      cout<<" ";

    cout<<"*"<<"\n";
  }

  for (int i = 0; i < sideLength; i++)
    cout<<"*";

  cout<<"\n";

  return 0;
}
于 2012-09-26T23:41:09.853 に答える