C ++出力のフォーマットの問題

c++
C ++出力のフォーマットの問題

私の問題を例証してみましょう、私は次のような機能を持っています:

void printer(int width, int hight){
    for(int i=0;i

私の問題は、関数プリンターが常に同じ幅で両方のforループを出力する必要があることです

例:出力は次のようになります(幅5):

   &^
 &&&^

とにかく(上記のコードから)「for」ループの出力のいずれかを「for」ループの実行回数に関係なく一定の幅で出力する

  0  0


ベストアンサー

質問は不明です。 次のようなものをお探しですか?

void printer(int amps, int carets, int overallWidth){
    for (int i = amps + carets; i < overallWidth; i++)  std::cout<<" ";  // leading padding
    for (int i=0;i

変更は、パディングを出力するためのループを追加するだけでした。 (わかりやすくするためにパラメータ名も変更しました)

printer(1,1,5);
printer(3,1,5);

次に、例に示す出力を生成します

   &^
 &&&^

そしてもちろん、パラメーターとして渡されるのではなく、overallWidth変数をハードコーディングできます。 printer()関数の暗黙的な定数。

編集:+上記のスニペットは、質問のスニペットに非常に近いままでした。 ただし、より慣用的なアプローチがあります。たとえば、次の「1ライナー」では、文字列コンストラクターのオーバーロードの1つを使用して繰り返し文字の文字列を生成し、iomanipのsetw()でパディングを生成します。

void printer(int amps, int carets, int overallWidth){
   std::cout << setiosflags(ios::right) << setw(overalWidth)
             << string(amps, '&') + string (carets, '^')
             << std::endl;
}

3


を見てください。 「cout」を使用して、幅を指定できます。

#include
#include
using namespace std;

int main()
{
   cout << setiosflags(ios::left) << setw(10) << "Hello"
        << setiosflags(ios::right) << setw(20) << "World!";

   return 0;
}

1


タイトルとURLをコピーしました