You can truncate strings with a printf
field-width specifier:
printf("%.5s", "abcdefgh");
> abcde
Unfortunately it does not work for numbers (replacing d
with x
is the same):
printf("%2d", 1234); // for 34
printf("%.2d", 1234); // for 34
printf("%-2d", 1234); // for 12
printf("%-.2d", 1234); // for 12
> 1234
Is there an easy/trivial way to specify the number of digits to be printed even if it means truncating a number?
MSDN specifically says that it will not happen which seems unnecessarily limiting. (Yes, it can be done by creating strings and such, but I’m hoping for a “printf trick” or clever kludge.)
Like many of my best ideas, the answer came to me while lying in bed, waiting to fall asleep (there’s not much else to do at that time than think).
Use modulus!
printf("%2d\n", 1234%10); // for 4
printf("%2d\n", 1234%100); // for 34
printf("%2x\n", 1234%16); // for 2
printf("%2x\n", 1234%256); // for d2
It’s not ideal because it can’t truncate from the left (e.g., 12
instead of 34
), but it works for the main use-cases. For example:
// print a decimal ruler
for (int i=0; i<36; i++)
printf("%d", i%10);