2016-01-13 18 views
-6
#include <stdio.h> 
int main(void) 
{ 

    int mins = 10; 
    int formu = 6 * mins; 

    printf("Input: %x\n", mins); 
    printf("Result: %x\n", formu); 
} 

導致以下:爲什麼C代碼返回大於10的數字作爲字母?

Input: a 
Result: 3c 

我相信,由於某種原因,該類型中的一種,如果不能兼顧,正在生成一個「雙」,並把在「內部」導致一個conflict.When我改變無論是「%X」到「分鐘」或「formu」我得到了以下錯誤:

error: data argument not used by format string [-Werror,-Wformat-extra-args] 
    printf("Input: %mins\n", mins); 
      ~~~~~~~~~~~~~~~~^
  • 爲什麼編譯器假設我需要一張?
  • 這是數字大於10的原因導致字母轉換的原因嗎?

由於

+2

你問問十六進制是如何工作的? –

+0

不,不是真的。我只是困惑於爲什麼它在十六進制輸出。很抱歉,如果它太明顯 - 我對編碼相當陌生。 – HakBon

+0

正如其他人現在指出的那樣 - 它以十六進制輸出,因爲您要求它以十六進制輸出(即使這不是您的意圖)。 –

回答

1

手冊頁你問printf()代表數字作爲hexadecimal

嘗試使用%d%i而不是%x。這會將它們顯示爲十進制數字。

2

x%xhexadecimal格式說明和a是10進制。這與雙打無關。如果您想打印一個十進制數使用%d

printf("Input: %d\n", mins); 

printf documentation請參閱有關格式說明更多細節。

+1

謝謝 - 我不知道%可能導致的字母差異。 – HakBon

+0

一個無恥的插件:如果你不想擔心格式說明符使用類似https://github.com/cppformat/cppformat – vitaut

2

%x格式說明符告訴printf以十六進制輸出給定的整數值。

如果您希望輸出爲十進制,請使用%d

另外,您需要確保每個格式說明符都有正確類型的參數。所以%d,%x和%ürequire an int , while%f required a double`。使用錯誤的格式說明符導致undefined behavior

有關詳細信息,請參閱printf

+0

謝謝 - 現在明白了 – HakBon

相關問題