#include <iostream>
template<typename T, typename... Args>
void printf(const char *s, T value, Args... args)
{
while (*s) {
if (*s == '%') {
if (*(s + 1) == '%') {
++s;
}
else {
std::cout << value;
printf(s + 1, args...); // call even when *s == 0 to detect extra arguments
return;
}
}
std::cout << *s++;
}
}
int main() {
printf("test % %", "String", 10);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4Kdm9pZCBwcmludGYoY29uc3QgY2hhciAqcywgVCB2YWx1ZSwgQXJncy4uLiBhcmdzKQp7CiAgICB3aGlsZSAoKnMpIHsKICAgICAgICBpZiAoKnMgPT0gJyUnKSB7CiAgICAgICAgICAgIGlmICgqKHMgKyAxKSA9PSAnJScpIHsKICAgICAgICAgICAgICAgICsrczsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHN0ZDo6Y291dCA8PCB2YWx1ZTsKICAgICAgICAgICAgICAgIHByaW50ZihzICsgMSwgYXJncy4uLik7IC8vIGNhbGwgZXZlbiB3aGVuICpzID09IDAgdG8gZGV0ZWN0IGV4dHJhIGFyZ3VtZW50cwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHN0ZDo6Y291dCA8PCAqcysrOwogICAgfQp9CgppbnQgbWFpbigpIHsKCXByaW50ZigidGVzdCAlICUiLCAiU3RyaW5nIiwgMTApOwoJcmV0dXJuIDA7Cn0=