Позвольте мне убедиться, что я понимаю; у вас есть код вроде
while (some_condition)
{
bread();
bwrite();
pgsize();
}
и вы хотите отобразить выходы этих функций как
bread bwrite pgsize
1234 5678 1024
2345 6789 1024
Это близко к тому, что вы имели в виду?
Если так, то у вас есть пара вариантов. Сначала каждая функция печатает свой вывод, но без новой строки:
void bread()
{
...
printf("%*.*d", field_width, precision, value);
fflush(stdout)
...
}
где field_width
- минимальная ширина столбца, precision
- минимальное количество печатаемых цифр, а value
- независимо от того, какая функция печатается. *
в спецификаторе преобразования позволяет передавать ширину и точность в качестве аргументов в printf (), т.е.
printf("%*.*f", 10, 2, 3.14159);
совпадает с
printf("%10.2f", 3.14159);
Главное преимущество использования флагов *
в спецификаторе преобразования означает, что вы можете настроить выходной формат во время выполнения. Обратите внимание, что *
в спецификаторе преобразования означает что-то совершенно другое в scanf ().
Либо последняя вызванная функция, либо вызывающая сторона должна записать новую строку в выходной поток.
Альтернативно, вы можете сделать так, чтобы каждая функция возвращала вызывающей стороне свое значение и позволяла вызывающей стороне делать весь вывод:
while (some_condition)
{
int r = bread();
int w = bwrite();
int s = pgsize();
printf("%*.*d%*.*d%*.*d\n", rwidth, rprec, r, wwidth, wprec, w, swidth, sprec, s);
}
где rwidth, rprec и т. Д. Были объявлены и установлены в другом месте.