Output formatting is the art of controlling how data is presented on the screen. In C, while printf() is the primary tool, the power lies in its Format Modifiers. These allow you to align text, control decimal precision, pad numbers with zeros, and create clean, tabular data displays.
Without proper formatting, output can be messy and difficult for a user to read, especially when dealing with financial data, scientific notation, or large tables of numbers.
A standard format specifier follows this general structure:
% [flags] [width] [.precision] [length] type
Each component serves a specific purpose in transforming raw data into a readable format.
The width defines the minimum number of characters to be printed.
If the data is shorter than the width, spaces are added (usually to the left).
If the data is longer than the width, the width is ignored, and the full data is printed (C never truncates your data to fit a width).
Example: %5d will print the number 12 as 12 (three leading spaces).
Precision behaves differently depending on the data type:
For Integers: It defines the minimum number of digits to appear. If the number is shorter, it pads with leading zeros.
For Floats: It defines the number of digits after the decimal point. (e.g., %.2f).
For Strings: It defines the maximum number of characters to be printed from the string.
Flags provide additional control over the alignment and sign of the output:
Minus (-): Left-aligns the output within the given width (default is right-align).
Plus (+): Forces the output to show a sign (+ or -), even for positive numbers.
Zero (0): Pads the width with zeros instead of spaces.
Space ( ): Leaves a blank space before positive numbers (useful for aligning positive and negative numbers).
Hash (#): Used with %x or %o to print the prefix 0x or 0.
Precision is vital here. By default, %f prints 6 decimal places.
%.2f → Rounds to 2 decimal places.
%e → Displays in scientific notation ($1.234e+02$).
%g → Automatically chooses between %f and %e based on which is more concise.
Formatting strings is essential for creating headers or columns.
%20s → Right-aligns a string in a 20-character field.
%-20s → Left-aligns a string in a 20-character field.
%.5s → Prints only the first 5 characters of a string.
This example demonstrates how to use these modifiers to create a professional-looking invoice table.
#include <stdio.h> int main() { char item1[] = "Microcontroller"; char item2[] = "Sensor"; int qty1 = 10, qty2 = 150; float price1 = 15.50, price2 = 2.755; printf("-------------------------------------------\n"); // Header: Left-aligned name, right-aligned Qty and Price printf("%-20s %10s %10s\n", "Item Name", "Quantity", "Price"); printf("-------------------------------------------\n"); // Row 1: Width and 2-decimal precision printf("%-20s %10d %10.2f\n", item1, qty1, price1); // Row 2: Note how 2.755 rounds to 2.76 printf("%-20s %10d %10.2f\n", item2, qty2, price2); printf("-------------------------------------------\n"); // Demonstrating Flags int val = 42; printf("Right-aligned (default): |%5d|\n", val); printf("Left-aligned (-): |%-5d|\n", val); printf("Zero-padded (0): |%05d|\n", val); printf("Always show sign (+): |%+d|\n", val); return 0; }
| Modifier | Meaning | Example | Result (for input 42 or 3.14) |
| %10d | Width of 10 | ` | 42 |
| %-10d | Left-align | ` | 42 |
| %010d | Zero pad | ` | 0000000042 |
| %.2f | 2 decimals | 3.14 | (Rounds if necessary) |
| %+d | Show sign | +42 | (Always shows + or -) |
Copyright ©2025. All Rights Reserved Emblab THE RAVE INNOVATION