Функция setw () в C ++ не добавляет пробел для последнего напечатанного значения (Неверная ширина / пробелы?) - PullRequest
0 голосов
/ 07 апреля 2020

Вот мой код:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int steve[2][3] = {{2, 3, 4}, {8, 9, 10}};

    //What the array will look like:
        // 2, 3, 4,
        // 8, 9, 10
    //They operate like coordinates: array[row number][index of element within row]

    //cout << steve[row][column];


    int n = 0;
    int i = 0;

    //my way
    while (n == 0 && i < 3)
    {
        cout << steve[n][i] << setw(2);
        i++;

        if (i == 3)
        {
            cout << endl;
            i = 0;
            n +=1;

            while (n == 1 && i<3)
            {

                cout << steve[n][i] << setw(2);
                i++;   
            }
        }
    }
}

Моя проблема в том, что мой вывод выглядит так:

2 3 4                                                                                                                      
 8 910

Когда я пытаюсь заставить его выглядеть так:

2 3 4                                                                                                                      
8 9 10

Может кто-нибудь объяснить мне, почему setw () не работает, и что он на самом деле делает с моим кодом? Просто на голову, я уже попробовал просто использовать пробелы в обеих выходных командах, например:

cout << steve[n][i] << " "; 
cout << steve[i][n] << " ";

И это работает так, как я хочу, но мне бы очень хотелось узнать, как работает setw () и почему это дает мне эту проблему.

Спасибо.

1 Ответ

0 голосов
/ 07 апреля 2020

Вывод будет выровнен по правой стороне, для желаемого выхода вам нужно выровнять его по левой стороне, ширина все равно будет равна двум, но тогда у вас будет пустое пространство справа и значение слева :

8_9_10

вместо

_8_910

Использование:

cout << left << setw(2) << steve[n][i];

Как и в коде, вы используете форматирование вывода перед выводом.

Если бы у вас было два смежных значения в 10 s, вы должны использовать setw(3), иначе между ними не должно быть пробелов, так как они заполнены обоими доступными пробелами.

Live пример

Обратите внимание на Почему "использование пространства имен std;" считается плохой практикой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...