2016-04-26 79 views
0

你好老鄉程序員,四位半數字轉換器

我可能要問你,

I`ve接到了我大學的任務十進制數字轉換(0-9) 到一半位(半字節= 0101即)的限制是,如果語句

,所以我試着一點點,到目前爲止來到我們不能使用

int main() 
{ 
    int n; 

    printf("type in your digit"); 
    scanf("%d", &n); 
    printf("%n%n%n%n", (n/8)%2, (n/4)%2, (n/2)%2, n%2); 

    return 0; 
} 

我在這裏的問題是,我CA NT放在一個數字,如果我這樣做的程序崩潰

我真的掙扎,不知道如何着手或使其工作

你可以給我如何可以工作 一些例子或者一些好的建議如何使其工作。

我真的很感激它

真的謝謝所有幫助和解答!

+2

'%N'沒有做什麼,你認爲它。閱讀「printf」的文檔。 – user3386109

+0

將ASCII碼轉換爲半字節使用:'char nibble = digit - '0';''nibble'中的結果值將在0x00至0x09的範圍內。要打印各個位:'printf(「%i%i%i%i」,((nibble >> 3)&1)+'0',((nibble >> 2)&1)+'0',((半字節>> 1)&1)+'0',(半字節&1)+'0');' – user3629249

回答

0

您正在使用printf的錯誤格式說明符。

%n格式說明符需要int *,並將到目前爲止寫入的字符數寫入給定的內存地址。由於您將int傳遞給期望int *的參數,因此printf會將該數字解釋爲內存地址並嘗試寫入該數字。這是未定義的行爲,很可能會導致核心轉儲。

你想用%d代替,用於輸出int

printf("%d%d%d%d", (n/8)%2, (n/4)%2, (n/2)%2, n%2);