2015-10-14 72 views
-1

我想要求用戶輸入,將該輸入設置爲無符號字符,然後將其打印出來。例如,輸入會問我「Input x:」,並且我把0xABCD作爲輸入。我需要它也打印出「0xABCD」。如何在C中掃描並打印未簽名的字符?

這是我到目前爲止有:

unsigned char x; 
printf("Input x:"); 
scanf("%s, &x); 

printf("%u", x); 

它給我0,而不是0xABCD。

我在做什麼錯?

+1

char只是一個字符,你需要一個字符數組。 –

+0

確定一個16位值適合'unsigned char'? – Downvoter

+0

你使用什麼編譯器?將警告級別撥到最大並閱讀所有警告。 –

回答

0

在你的代碼

scanf("%s, &x); 

調用未定義的行爲。 x的類型是char,您不能使用%s來掃描該值。

您需要的是定義一個char數組,至少能夠保持您的預期輸入。

如果你想有一個第二種方法,你可以這樣做

  • 掃描輸入的使用使用%#X格式說明%x
  • 打印相同的(無符號)整數。

See it live

0

字符串是由'\0'終止字符數組。您正在將字符串讀入單個字符,這是未定義的行爲。

你的代碼真的應該是這個樣子:

unsigned char x[64]; 
printf("Input x:"); 
scanf("%63s, x); /* use the size of buffer to prevent buffer overflows */ 

printf("%s", x); 
1

您需要使用"%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); 
+0

可以使用'%d'或'%u'嗎? – ameyCU

+1

@ameyCU,'%u'是對的,我想。 –

+1

你說得對,但我不認爲這是OP打算做的。 –

0

以任何方式「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的...)。

0

沒有char等價物,用int代替。

int main(){ 

    unsigned int x; 
    printf("Input x:"); 
    scanf("%x", &x); 

    printf("\n%d (%#x)\n", x); 
}