我想要求用戶輸入,將該輸入設置爲無符號字符,然後將其打印出來。例如,輸入會問我「Input x:」,並且我把0xABCD作爲輸入。我需要它也打印出「0xABCD」。如何在C中掃描並打印未簽名的字符?
這是我到目前爲止有:
unsigned char x;
printf("Input x:");
scanf("%s, &x);
printf("%u", x);
它給我0,而不是0xABCD。
我在做什麼錯?
我想要求用戶輸入,將該輸入設置爲無符號字符,然後將其打印出來。例如,輸入會問我「Input x:」,並且我把0xABCD作爲輸入。我需要它也打印出「0xABCD」。如何在C中掃描並打印未簽名的字符?
這是我到目前爲止有:
unsigned char x;
printf("Input x:");
scanf("%s, &x);
printf("%u", x);
它給我0,而不是0xABCD。
我在做什麼錯?
在你的代碼
scanf("%s, &x);
調用未定義的行爲。 x
的類型是char
,您不能使用%s
來掃描該值。
您需要的是定義一個char
數組,至少能夠保持您的預期輸入。
如果你想有一個第二種方法,你可以這樣做
%#X
格式說明%x
字符串是由'\0'
終止字符數組。您正在將字符串讀入單個字符,這是未定義的行爲。
你的代碼真的應該是這個樣子:
unsigned char x[64];
printf("Input x:");
scanf("%63s, x); /* use the size of buffer to prevent buffer overflows */
printf("%s", x);
您需要使用"%hhu"
作爲格式說明符來讀取unsigned char
。見表http://en.cppreference.com/w/c/io/fscanf。
unsigned char x;
printf("Input x:");
scanf("%hhu", &x);
請注意,如果您使用此格式說明,輸入必須是數字。它不能是一個角色。 65
將是有效的輸入,但A
不會。
即將出現想要使用0xABCD
作爲輸入的問題,該值太大而不適合unsigned char
。您可以使用:
unsigned x;
printf("Input x:");
scanf("%x", &x);
要打印數量爲0xABCD
,你可以使用:
printf("0x%X\n", x);
如果你不介意被印刷爲0xabcd
數,你可以使用:
printf("%#x\n", x);
以任何方式「0xABCD」不能被視爲'char'。 char可以存儲一個8位的值,所以從0到255(如果無符號),給定的數字0xABCD等於43981。
您可以將其作爲字符串讀取,或者以十六進制值(必須是無符號值)讀取。對於這種情況的一個例子:
unsigned int x;
printf("Number: ");
scanf("%x", &x);
printf("%d/%X\n", x, x);
會給:
Number: 0xABCD
43981/ABCD
如果作爲一個字符串處理,你將不得不把它的其他方式(sscanf的...)。
沒有char等價物,用int代替。
int main(){
unsigned int x;
printf("Input x:");
scanf("%x", &x);
printf("\n%d (%#x)\n", x);
}
char只是一個字符,你需要一個字符數組。 –
確定一個16位值適合'unsigned char'? – Downvoter
你使用什麼編譯器?將警告級別撥到最大並閱讀所有警告。 –