ashwanth
ashwanth

Reputation: 11

formatting the output using c

i have multiple outputs that i need to print as columns side by side. is there any way to achieve this using C? something like the output of ls -a i.e. i want to print the first column data, then the second and so on

Upvotes: 1

Views: 5213

Answers (6)

John Bode
John Bode

Reputation: 123458

Let me make sure I understand; you have some code like

while (some_condition)
{
  bread();
  bwrite();
  pgsize();
}

and you want to display the outputs of those functions as

bread    bwrite    pgsize
1234     5678      1024
2345     6789      1024

Is that close to what you meant?

If so, then you have a couple of choices. First, each function prints its output, but without a newline:

void bread()
{
  ...
  printf("%*.*d", field_width, precision, value);
  fflush(stdout)
  ...
}

where field_width is the minimum width of the column, precision indicates the minimum number of digits to be printed, and value is whatever your function is printing. The * in the conversion specifier allows you to pass the width and precision as arguments to printf(), i.e.,

printf("%*.*f", 10, 2, 3.14159);

is the same as

printf("%10.2f", 3.14159);

The chief advantage of using the * flags in the conversion specifier means you can adjust your output format at runtime. Note that * in a conversion specifier means something completely different in scanf().

Either the last function called or the caller will need to write a newline to the output stream.

Alternately, you can have each function return its value to the caller, and let the caller do all the output:

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);
}

where rwidth, rprec, etc., have all been declared and set elsewhere.

Upvotes: 1

santosc
santosc

Reputation: 1273

EDIT (changing my whole answer):

For the formats that you get for free with printf (including some to do with length): http://www.cplusplus.com/reference/clibrary/cstdio/printf/

I would avoid using tabs to do this. Tabs can be interpretted in different ways on different machines (2 spaces, 4 spaces, n spaces). If this is a fun app just for you on your machine, tab away...but the following example is just as easy.

RIGHT JUSTIFY (8 is the width, s means string, | is just to show spacing):

printf("|%8s|%8s|","try","this");

would result in this:

|     try|    this|

LEFT JUSTIFY (- means left-justify, 8 is the width, s means string, > is just to show spacing):

printf("%-8s%-8s>","try","this");

would result in this:

try     this    >

Upvotes: 3

Steve Lazaridis
Steve Lazaridis

Reputation: 2210

You can do this with format strings.
See the printf(3) manpage for more info.

Upvotes: 6

mrkj
mrkj

Reputation: 3101

If you mean automatically calculating the number of columns and their widths and so on, you can't do this with printf() alone. However, it's possible to add extra code to precompute the number and width of columns. For instance, consider the OpenBSD code for ls.

Upvotes: 2

Mark Elliot
Mark Elliot

Reputation: 77044

You'll want to specify field widths, this question has a pretty good example of what you're looking for.

Upvotes: 5

aJ.
aJ.

Reputation: 35450

using "\t" and "\n"

Example:

for(int i = 0 ; i < m ; ++i)
{
  for(int j = 0; j < n ; ++j
 {
    printf("%d\t", a[i][j]);
 }
 printf("\n");
}

Upvotes: 0

Related Questions