Aracılığıyla paylaş


printf_p konumsal parametreler

Konumsal parametreler, biçim dizesindeki bir alana değiştirmek için bağımsız değişkeni numaralandırarak belirtmenize olanak sağlar. Aşağıdaki konumsal parametre printf işlevleri kullanılabilir:

Konumsal olmayan printf işlevleri Konumsal parametre eşdeğerleri
printf, _printf_l, wprintf, _wprintf_l _printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l
sprintf, _sprintf_l, swprintf, _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_l, fwprintf, _fwprintf_l _fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
vprintf, _vprintf_l, vwprintf, _vwprintf_l _vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l
vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l _vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l
vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, , __vswprintf_l _vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

Konumsal parametreleri belirtme

Parametre dizini oluşturma

Varsayılan olarak, konumsal biçimlendirme yoksa, konumsal işlevler konumsal olmayan işlevlerle aynı şekilde davranır. Biçim belirticinin başında kullanarak %n$ biçimlendirecek konum parametresini belirtirsiniz; burada n parametrenin parametre listesinde biçimlendirileceği konumdur. Parametre konumu, biçim dizesinden sonraki ilk bağımsız değişken için 1'de başlar. Biçim belirticisinin geri kalanı, biçim tanımlayıcısı ile printf aynı kuralları izler. Biçim tanımlayıcıları hakkında daha fazla bilgi için bkz . Biçim belirtimi söz dizimi: printf ve wprintf işlevleri.

Konumsal biçimlendirme örneği aşağıda verilmiştir:

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

Bu örnek şunu yazdırır:

November 10

Kullanılan sayıların sırasının bağımsız değişkenlerin sırasıyla eşleşmesi gerekmez. Örneğin, geçerli bir biçim dizesi:

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

Bu örnek şunu yazdırır:

10 November

Geleneksel biçim dizelerinden farklı olarak, konumsal parametreler bir biçim dizesinde birden çok kez kullanılabilir. Örneğin,

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

Bu örnek şunu yazdırır:

10 times 10 is 100

Tüm bağımsız değişkenler, biçim dizesinde en az bir kez kullanılmalıdır. Biçim dizesinde izin verilen en fazla konumsal parametre sayısı tarafından _ARGMAXverilir.

Genişlik ve duyarlık

Bir konumsal parametreyi genişlik veya duyarlık belirtici olarak belirtmek için kullanabilirsiniz *n$ ; burada n parametre listesindeki width veya precision parametresinin konumudur. Genişlik veya duyarlık değerinin konumu* simgesinin hemen ardından görünmelidir. Örneğin,

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

veya

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

Konumsal ve konumsal olmayan bağımsız değişkenleri karıştırma

Konumsal parametreler aynı biçim dizesindeki konumsal olmayan parametrelerle karıştırılamayabilir. Herhangi bir konumsal biçimlendirme kullanılırsa, tüm biçim tanımlayıcıları konumsal biçimlendirme kullanmalıdır. Ancak ve ilgili işlevler, printf_p konumsal parametre içermeyen biçim dizelerinde konumsal olmayan parametreleri desteklemeye devam eder.

Örnek

// 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

Ayrıca bkz.

Biçim belirtimi söz dizimi: printf ve wprintf işlevleri