Подтвердить что ты не робот

Как я могу напечатать одну и ту же переменную в строке несколько раз?

У меня есть строка формата, подобная этой:

buf[] = "A%d,B%d,C%d,D%d,F%d,G%d,H%d,I%d,J%d";

и я хочу вставить одно и то же целое число для каждого %d, поэтому я использую:

 int val = 6;
 sprintf(buf2, buf, val,val,val,val,val,val,val,val,val);

Могу ли я использовать sprintf таким образом, чтобы мне только один раз писать val, а sprintf будет использовать его для каждого %d?

4b9b3361

Ответ 1

Да, вы можете использовать %1$d каждый раз. 1$ ссылается на второй аргумент, вы, очевидно, могли бы сделать это и с другими аргументами.

Демо: http://codepad.org/xVmdJkpN

Обратите внимание, что спецификатор позиции является расширением POSIX, поэтому он может не работать с каждым компилятором. Если вам это нужно, например, с компилятором Visual С++, подумайте об использовании уродливого способа повторения аргумента или вообще не используйте функцию типа printf. Другим вариантом будет использование реализации sprintf, совместимой с POSIX, или использование нескольких вызовов для добавления одного числа каждый раз в цикле (в случае, если строка формата построена динамически, что помешает вам указать правильное количество аргументов).


На боковой ноте следует избегать sprintf. Вместо этого используйте snprintf(buf2, sizeof(buf2), ....). Конечно, для этого требуется buf2 иметь статический размер, известный во время компиляции, но если вы его вручную выделите, вы можете просто использовать переменную, содержащую длину вместо sizeof(buf2).

Ответ 2

Нет стандартного (то есть портативного) способа сделать это.