2012-01-27 123 views
1

我在這裏試圖將4位hexa轉換爲dec但未成功。 這是我的代碼。將十六進制掃描(scanf)從unsigned int數組轉換爲十進制

unsigned int array[4];       

printf("Type in 4-digit hexa: \n"); 

scanf("%x", &array); 

while(getchar() != '\n'); 

printf("Your number in dec is %u \n", array); 

我不知道它有什麼問題,但它不會給出正確的dec輸出。 就像我把EEFF放進去一樣,它應該發出61183,但程序不斷打印出65518.

這個數字從哪裏來?我的代碼有什麼問題?根據我的考慮,我使用了unsigned int,FFFF等於65385,unsigned int的範圍是0到65535.數據範圍應該沒有問題,我也使用%u。

我已經做了一些搜索後,我現在唯一能想到的問題是,這個問題可能與無符號整數的int大小有關。 我看了解釋,但不太明白。

我知道,這可能是重複,但我在這裏要求一個更容易的解釋 爲什麼這是行不通的。說實話,我對這個網站和編程都是一個絕對的新手,所以請在編碼上輕鬆一點。僅供參考,除了stdio.h之外,我什麼都不知道。

+0

我嘗試使用代碼「展開」建議,它的工作很精美。謝謝你,放鬆一下,還有每個來到這裏幫助我的人! – 2012-01-27 14:36:26

+0

FYI http://www.cplusplus.com/ - 這個網站有很多的例子,可能會幫助你瞭解c/C++的美麗...... – enam 2012-01-28 13:44:46

+0

謝謝你的建議。我一定會深入研究它。 :D – 2012-01-29 07:00:36

回答

6

您正在傳遞一個指針arrayprintf()。這裏不需要陣列,你想掃描和打印的是單個數字。

unsigned int number; 

printf("Type in 4-digit hex:\n"); 

if (scanf("%x", &number) == 1) 
    printf("Your number in dec is %u \n", number); 

還要注意,它被認爲是一個好主意,以檢查是否scanf()成功與否,通過檢查返回值。

+0

非常感謝您的回答。 但是,根據你的回答,爲什麼「if(scanf(」%x「,&number)== 1)」? – 2012-01-27 13:28:27

+0

關於檢查scanf()是否成功,我已經逐步跟蹤了程序,但它並沒有顯示任何線索爲我檢查。我的輸出窗口彈出一個輸入窗口,希望我輸入輸入內容(4位六進制),並且它立刻向我顯示結果。 我在32位windows操作系統上使用TC編譯器。 – 2012-01-27 13:36:11

+0

線索是scanf的返回值。這是成功轉換格式說明符的數量。猜猜爲什麼這與1相比? – Jens 2012-01-27 13:51:06

2

你並不需要一個數組:

unsigned int val; 
printf("Type in 4-digit hexa: \n"); 
scanf("%x", &val); 
printf("Your number in dec is %u \n", val); 
+0

非常感謝你的回答。 另一個問題,如果我可以,什麼時候你需要一個數組? 我以爲我需要在這種情況下的數組,因爲輸入是4位數,所以我設置了一個4的數組。 – 2012-01-27 13:29:53

1

一個。打印array[0],而不是array

(可選)b。掃描到array,而不是&array

c。 getchar()有什麼意義?

+0

爲什麼array [0],而不是數組? 關於getchar(),我只是爲了安全起見,它不掃描並存儲「\ n」的值。 – 2012-01-27 13:41:00

+0

a。 'array'是'unsigned int'的數組。你想打印這個數組開頭的'unsigned int'。因此,'array [0]'。 C。不要這樣做。 'scanf'足夠聰明地執行檢查。 (實際上,因爲你在scanf後執行了getchar,所以它甚至無法工作。 – asaelr 2012-01-27 13:44:30

+0

哦,謝謝!我應該如何檢查getchar()是否工作,除了跟蹤程序,因爲我做了它, – 2012-01-27 13:55:53

-1

不,您必須輸入字符串作爲字符。之後,你轉換爲數字。 Ex

char *str=char[10]; 
int i=0,num=0; 
printf("Type in 4-digit hexa: "); 
scanf("%s",str); 

for(i=0;str[i]!='\0';i++) 
    if(str[i]>='0' && str[i]<='9') num=16*num+str[i]-'0'; 
    else if(str[i]>='a' && str[i]<='f') num=16*num+str[i]-'a'; 
    else if(str[i]>='A' && str[i]<='F') num=16*num+str[i]-'A'; 

printf("Dec is %d",num); 
+0

我真的很感謝你的幫助,但是請原諒我不瞭解for-loop中的if-else條件。 你介意解釋一下嗎? – 2012-01-27 13:43:04

+0

爲什麼不讓'scanf'將文本轉換爲數字?此外,您的轉換代碼非常難看,並且非常需要一些大括號。什麼是'char * str = char [10]'? – ugoren 2012-01-27 14:04:46

相關問題