ฉันมีโปรแกรมดังต่อไปนี้
#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
ฯลฯ ) ด้วยunsigned
สำหรับint
ชนิดข้อมูล
คือ%u
ตัวระบุที่ถูกต้องunsigned short int
? ถ้าเป็นเช่นนั้นเหตุใดฉันจึงได้รับคำเตือนดังกล่าวข้างต้น!
แก้ไข: ส่วนใหญ่แล้วฉันพยายาม%uh
และยังคงให้คำเตือนอยู่
printf("%u\n", (unsigned int)length); //
ใช้งานได้เสมอเนื่องจากข้อมูลจำเพาะ C99 ที่คุณอ่านรับประกันได้ว่าsizeof(short) <= sizeof(int)
(แต่คำตอบที่แท้จริงสำหรับคำถามด้านล่างนี้ดีกว่ามาก)