Что такое спецификатор формата для unsigned short int?
у меня есть следующие программы
#include <stdio.h>
int main(void)
{
unsigned short int length = 10;
printf("Enter length : ");
scanf("%u", &length);
printf("value is %u n", length);
return 0;
}
, который при компиляции с помощью gcc filename.c выдано следующее предупреждение (в scanf() линия).
warning: format ‘%u’ expects argument of type ‘unsigned int *’, but argument 2 has type ‘short unsigned int *’ [-Wformat]
я тогда сослался на C99 specification - 7.19.6 Formatted input/output functions и не мог понять правильный спецификатор формата при использовании модификаторов длины (например,short,long, etc) с unsigned на int тип данных.
и %u правильный спецификатор unsigned short int? Если да, то почему я получаю вышеупомянутое предупреждение?!
изменить:
Большую часть времени я пытался %uh и он все еще давал предупреждение.
4 ответа:
попробуйте использовать
"%h"модификатор:scanf("%hu", &length); ^ISO / IEC 9899: 201x-7.21.6.1-7
указывает , что следующее преобразование d , i , o , u , x , X или n спецификатор применяется к аргументу с типом указатель на короткий или беззнаковое короткое.
на
scanf, вы должны использовать%huтак как вы передаете указатель наunsigned short. Ибоprintf, это невозможно передатьunsigned shortиз-за рекламных акций по умолчанию (он будет повышен доintилиunsigned intв зависимости отintимеет по крайней мере столько битов значения, какunsigned shortили нет) так%dили%u- это хорошо. Вы можете использовать%huЕсли вы предпочитаете, хотя.
со страницы руководства Linux:
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.таким образом, чтобы напечатать беззнаковое короткое целое число, строка формата должна быть
"%hu".
здесь хороший стол на
printfспецификаторы. Так и должно быть%huнаunsigned short int.