Bagikan melalui


printf_p parameter posisi

Parameter posisi memungkinkan Anda menentukan berdasarkan angka argumen untuk diganti menjadi bidang dalam string format. Fungsi parameter printf posisi berikut tersedia:

Fungsi cetak non-posisi Parameter posisi yang setara
printf, , _printf_lwprintf,_wprintf_l _printf_p, , _printf_p_l_wprintf_p,_wprintf_p_l
sprintf, , _sprintf_lswprintf, , _swprintf_l,__swprintf_l _sprintf_p, , _sprintf_p_l_swprintf_p,_swprintf_p_l
_cprintf, , _cprintf_l_cwprintf,_cwprintf_l _cprintf_p, , _cprintf_p_l_cwprintf_p,_cwprintf_p_l
fprintf, , _fprintf_lfwprintf,_fwprintf_l _fprintf_p, , _fprintf_p_l_fwprintf_p,_fwprintf_p_l
vprintf, , _vprintf_lvwprintf,_vwprintf_l _vprintf_p, , _vprintf_p_l_vwprintf_p,_vwprintf_p_l
vfprintf, , _vfprintf_lvfwprintf,_vfwprintf_l _vfprintf_p, , _vfprintf_p_l_vfwprintf_p,_vfwprintf_p_l
vsprintf, , _vsprintf_lvswprintf, , _vswprintf_l,__vswprintf_l _vsprintf_p, , _vsprintf_p_l_vswprintf_p,_vswprintf_p_l

Cara menentukan parameter posisi

Pengindeksan parameter

Secara default, jika tidak ada pemformatan posisi, fungsi posisi bertingkah identik dengan yang tidak berposisi. Anda menentukan parameter posisi untuk diformat dengan menggunakan %n$ di awal penentu format, di mana n adalah posisi parameter untuk diformat dalam daftar parameter. Posisi parameter dimulai pada 1 untuk argumen pertama setelah string format. Sisa penentu format mengikuti aturan yang sama dengan penentu printf format. Untuk informasi selengkapnya tentang penentu format, lihat Sintaks spesifikasi format: printf dan wprintf fungsi.

Berikut adalah contoh pemformatan posisi:

_printf_p("%1$s %2$s", "November", "10");

Contoh ini mencetak:

November 10

Urutan angka yang digunakan tidak perlu cocok dengan urutan argumen. Misalnya, berikut adalah string format yang valid:

_printf_p("%2$s %1$s", "November", "10");

Contoh ini mencetak:

10 November

Tidak seperti string format tradisional, parameter posisi dapat digunakan lebih dari sekali dalam string format. Contohnya,

_printf_p("%1$d times %1$d is %2$d", 10, 100);

Contoh ini mencetak:

10 times 10 is 100

Semua argumen harus digunakan setidaknya sekali di suatu tempat dalam string format. Jumlah maksimum parameter posisi yang diizinkan dalam string format diberikan oleh _ARGMAX.

Lebar dan presisi

Anda dapat menggunakan *n$ untuk menentukan parameter posisi sebagai penentu lebar atau presisi, di mana n adalah posisi parameter lebar atau presisi dalam daftar parameter. Posisi lebar atau nilai presisi harus muncul segera mengikuti simbol * . Contohnya,

_printf_p("%1$*2$s","Hello", 10);

or

_printf_p("%2$*1$s", 10, "Hello");

Mencampur argumen posisional dan non-posisi

Parameter posisi mungkin tidak dicampur dengan parameter non-posisi dalam string format yang sama. Jika ada pemformatan posisi yang digunakan, semua penentu format harus menggunakan pemformatan posisi. Namun, printf_p dan fungsi terkait masih mendukung parameter non-posisi dalam string format yang tidak berisi parameter posisi.

Contoh

// positional_args.c
// Build by using: cl /W4 positional_args.c
// Positional arguments allow the specification of the order
// in which arguments are consumed in a formatting string.

#include <stdio.h>

int main()
{
    int     i = 1,
            j = 2,
            k = 3;
    double  x = 0.1,
            y = 2.22,
            z = 333.3333;
    char    *s1 = "abc",
            *s2 = "def",
            *s3 = "ghi";

    // If positional arguments are unspecified,
    // normal input order is used.
    _printf_p("%d %d %d\n", i, j, k);

    // Positional arguments are numbers followed by a $ character.
    _printf_p("%3$d %1$d %2$d\n", i, j, k);

    // The same positional argument may be reused.
    _printf_p("%1$d %2$d %1$d\n", i, j);

    // The positional arguments may appear in any order.
    _printf_p("%1$s %2$s %3$s\n", s1, s2, s3);
    _printf_p("%3$s %1$s %2$s\n", s1, s2, s3);

    // Precision and width specifiers must be int types.
    _printf_p("%3$*5$f %2$.*4$f %1$*4$.*5$f\n", x, y, z, j, k);
}
1 2 3
3 1 2
1 2 1
abc def ghi
ghi abc def
333.333300 2.22 0.100

Lihat juga

Sintaks spesifikasi format: printf dan wprintf fungsi