What is the format specifier for unsigned short int? What is the format specifier for unsigned short int? c c

What is the format specifier for unsigned short int?


Try using the "%h" modifier:

scanf("%hu", &length);        ^

ISO/IEC 9899:201x - 7.21.6.1-7

Specifies that a following d , i , o , u , x , X , or n conversion specifier applies to an argument with type pointer to short or unsigned short.


For scanf, you need to use %hu since you're passing a pointer to an unsigned short. For printf, it's impossible to pass an unsigned short due to default promotions (it will be promoted to int or unsigned int depending on whether int has at least as many value bits as unsigned short or not) so %d or %u is fine. You're free to use %hu if you prefer, though.


From the Linux manual page:

h      A  following  integer conversion corresponds to a short int or unsigned short int argument, or a fol‐       lowing n conversion corresponds to a pointer to a short int argument.

So to print an unsigned short integer, the format string should be "%hu".