C ++ выходное выравнивание - PullRequest
1 голос
/ 05 апреля 2020
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{

    double start_temp, end_temp, incr, fahrenheit, celsius, kelvin;
    do
    {
        cin >> start_temp >> end_temp >> incr;
        if (start_temp > end_temp || incr <= 0)
        {
            cout << "Starting temperature must be <= ending temperature and increment must be > 0.0\n";
        }
    } while (start_temp > end_temp || incr <= 0);
    cout << fixed << setprecision(4);

    cout << "\n"
         << left << setw(18) << "Fahrenheit" << right << setw(18) << "Celsius" << setw(18) << "kelvin";

    for (fahrenheit = start_temp; fahrenheit <= end_temp; fahrenheit = fahrenheit + incr)

    {
        celsius = (fahrenheit - 32) / 1.8;
        kelvin = celsius + 273.15;

        cout << "\n"
             << left << setw(18) << fahrenheit << right << setw(18) << celsius << right << setw(18) << kelvin;
    }

    return 0;
}

Числа должны быть шириной 18 символов с точностью до 4 цифр и должны быть в фиксированном формате. Не используйте символы табуляции (\ t) для вывода значений .......... Вот что я получаю для вывода:

-30 100 20

Fahrenheit                   Celsius            kelvin
-30.0000                    -34.4444          238.7056
-10.0000                    -23.3333          249.8167
10.0000                     -12.2222          260.9278
30.0000                      -1.1111          272.0389
50.0000                      10.0000          283.1500
70.0000                      21.1111          294.2611
90.0000                      32.2222          305.3722

Мои числа в столбце Фаренгейта не выровнены правильно ........ Я хочу, чтобы мой вывод отображался точно так же, как тезисы. Вот пример прогона с допустимым вводом:

-30 100 20 Вывод будет:

    Fahrenheit           Celsius            Kelvin
      -30.0000          -34.4444          238.7056
      -10.0000          -23.3333          249.8167
       10.0000          -12.2222          260.9278
       30.0000           -1.1111          272.0389
       50.0000           10.0000          283.1500
       70.0000           21.1111          294.2611
       90.0000           32.2222          305.3722

Рассмотрим этот ввод: 100,5 110,4 5 Допустимый вывод будет:

    Fahrenheit           Celsius            Kelvin
      100.5000           38.0556          311.2056
      105.5000           40.8333          313.9833

Я застрял. Пожалуйста, помогите

1 Ответ

1 голос
/ 05 апреля 2020

Вы выполнили выравнивание по левому краю, когда оно должно быть правым.

cout << "\n"
     << right << setw(18) << "Fahrenheit" << right << setw(18) << "Celsius" << setw(18) << "kelvin";

...

cout << "\n"
         << right << setw(18) << fahrenheit << right << setw(18) << celsius << right << setw(18) << kelvin;
}

Рабочий образец

Выход:

        Fahrenheit           Celsius            kelvin
          -30.0000          -34.4444          238.7056
          -10.0000          -23.3333          249.8167
           10.0000          -12.2222          260.9278
           30.0000           -1.1111          272.0389
           50.0000           10.0000          283.1500
           70.0000           21.1111          294.2611
           90.0000           32.2222          305.3722
...