ОБНОВЛЕНИЕ: Как я видел, вы не хотели выравнивать только второе поле. Но если вы жестко проводите поля, вы можете отформатировать их самостоятельно. Если они передаются вам как строки, они могут обрабатываться тем же методом, что и ваши двойники.
Поскольку вы хотите выровнять десятичные точки по результатам, вы должны сделать это самостоятельно из того, что я понимаю. Вспомогательная структура удерживает его в стороне и может использоваться повторно.
#include <iomanip>
#include <cmath>
#include <iostream>
struct buf
{
double val;
buf(double val) :val(val) {}
friend std::ostream& operator<< (std::ostream& os, buf b) {
for (double i = b.val; i < 1000; i*=10) os << " ";
return os << b.val;
}
};
int main() {
//
double gaslawPressure = 1.615;
double pointDistance = 221.615;
std::cout << std::setw(20) << std::left << std::setfill('.')
<< "Equation #01" << "Ideal Gas Law(Chemistry) : " << buf(gaslawPressure)<<" atm" << std::endl;
//printing the calculated distance
std::cout << std::setw(20) << std::left << std::setfill('.')
<< "Equation #02" << "Distance Formula(Math) : "<< buf(pointDistance)<< std::endl;
return 0;
}
Выход:
Equation #01........Ideal Gas Law(Chemistry) : 1.615 atm
Equation #02........Distance Formula(Math) : 221.615
От GNU Делают документацию,
5.3.1 Choosing the Shell
------------------------
The program used as the shell is taken from the variable `SHELL'. If
this variable is not set in your makefile, the program `/bin/sh' is
used as the shell.
, Таким образом, помещает SHELL := /bin/bash
во главе Вашего make-файла, и необходимо быть хорошими для движения.
BTW: можно также сделать, это для одной цели, по крайней мере, для GNU Делает. Каждая цель может иметь свои собственные переменные присвоения, как это:
all: a b
a:
@echo "a is $0"
b: SHELL:=/bin/bash # HERE: this is setting the shell for b only
b:
@echo "b is $0"
Это распечатает:
a is /bin/sh
b is /bin/bash
См. "Целевые Значения переменных" в документации для получения дополнительной информации. Та строка может пойти куда угодно в Make-файле, это не должно сразу быть перед целью.
Можно звонить bash
непосредственно, использовать эти -c
флаг:
bash -c "diff <(sort file1) <(sort file2) > $@"
, Конечно, Вы не можете быть в состоянии перенаправить к переменному $, но когда я пытался сделать это, я добрался -bash: $@: ambiguous redirect
как сообщение об ошибке, таким образом, можно хотеть изучить это, прежде чем Вы доберетесь также в это (хотя я использую удар 3.2.something, поэтому возможно, Ваш работы по-другому).
Можно назвать удар непосредственно в Make-файле вместо того, чтобы использовать оболочку по умолчанию:
bash -c "ls -al"
вместо:
ls -al
Если переносимость важно, вы можете не захотеть зависеть от конкретной оболочки в вашем Makefile. Не во всех средах доступен bash.