Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Parameter posisi memungkinkan Anda menentukan berdasarkan angka argumen untuk diganti menjadi bidang dalam string format. Fungsi parameter printf posisi berikut tersedia:
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