---
title: 1.16 Format Specifiers
description: "Format specifiers define how `printf()` and `scanf()` interpret the corresponding arguments. The specifier must match the type of the value being printed or the object receiving input. ``` #include int main() { int number = 25; float temperature = 36.5f;…"
url: "https://edcret.in/docs/c-programming/basic-refreshers/1-16-format-specifiers/"
updated: "2026-09-06"
category: C Programming / Basic Refreshers
---

# 1.16 Format Specifiers

Format specifiers define how `printf()` and `scanf()` interpret the corresponding arguments. The specifier must match the type of the value being printed or the object receiving input.

```
#include <stdio.h>

int main()
{
    int number = 25;
    float temperature = 36.5f;
    double value = 3.14159;
    char letter = 'A';

    printf("Integer   : %d\n", number);
    printf("Float     : %f\n", temperature);
    printf("Double    : %f\n", value);
    printf("Character : %c\n", letter);

    return 0;
}
```

### Example Output

```
Integer   : 25
Float     : 36.500000
Double    : 3.141590
Character : A
```

### Explanation

The format string contains conversion specifications such as:

```
%d
%f
%c
```

Each specification determines how the corresponding argument is formatted.

For example:

```
printf("%d\n", number);
```

uses `%d` for an `int`.

```
printf("%c\n", letter);
```

uses `%c` for a character.

### Common `printf()` Format Specifiers

| Specifier | Expected argument type | Purpose |
| --- | --- | --- |
| `%d` | `int` | Signed decimal integer |
| `%i` | `int` | Signed decimal integer |
| `%u` | `unsigned int` | Unsigned decimal integer |
| `%o` | `unsigned int` | Octal integer |
| `%x` | `unsigned int` | Lowercase hexadecimal |
| `%X` | `unsigned int` | Uppercase hexadecimal |
| `%c` | `int` | Character |
| `%s` | Pointer to `char` | String |
| `%f` | `double` | Floating-point value |
| `%e` | `double` | Scientific notation |
| `%g` | `double` | Shorter of `%f` or `%e` representation |
| `%p` | `void *` | Pointer address |
| `%zu` | `size_t` | `size_t` value |

For `printf()`, `float` arguments are promoted to `double`, so `%f` is used for both `float` and `double` values.

For `scanf()`, the corresponding format requirements are different. For example, `%f` expects a `float *`, while `%lf` expects a `double *`. These differences are covered in the dedicated `scanf()` lessons.
