2014-01-07 231 views
0

我試圖執行這個簡單的代碼來打印十進制和浮點格式的十六進制值,但它不打印任何東西。以十進制和浮點格式打印十六進制值

任何人都可以幫助..

所有的
#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    char content[]={0x24,0x00}; 
    int i; 
    for(i=0;i<2;i++) 
    { 
     printf("%d",content[i]); 
     printf("%.1f",content[i]/10.0); 
    } 
    printf("%.2f",(100*(unsigned)content[0]+(unsigned)content[1])/1000.0); 
} 
+1

然後你正在做的事情錯了;我得到'363.600.03.60',所以它*打印'任何'。 「Execute」...你知道你需要爲你的操作系統編譯並選擇鏈接,然後執行這樣創建的*可執行文件? – usr2564301

+0

是。我意識到這些事實。我不知道爲什麼它不打印任何東西。 – user3098026

+2

你需要在printf的結尾包含一個「\ n」 - 我敢打賭它只是被緩衝了。 – Vicky

回答

2

首先,有沒有這樣的事情「十六進制值」。

數值可以是整數也可以是非整數。

  • 對於整數值,有幾個可選的大小 - 1,2,4或8個字節。

  • 對於非整數值,有兩種可選的大小 - 4個字節(浮點數)或8個字節(雙精度)。

您的'content'變量是一個包含兩個整數的數組,每個整數的大小爲1個字節。

現在我們已經闡明瞭這一點,讓我們參考一下實際的問題。

通用編碼問題:

  1. 添加一個空格或換行符「\ n」在每次打印結束。

  2. 您必須在函數'main'的末尾返回一個值(您可以簡單地返回0)。

  3. 在最後兩次調用'printf'時,將參數強制轉換爲'float',因爲默認情況下編譯器可能會將其「發送」爲'double',在這種情況下'printf'會將一個8字節值作爲一個4字節值,並且您很可能會得到不正確的打印輸出。

改正的代碼:

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    char content[]={0x24,0x00}; 
    int i; 
    for(i=0;i<2;i++) 
    { 
     printf("%d\n",content[i]); 
     printf("%.1f\n",(float)(content[i]/10.0)); 
    } 
    printf("%.2f\n",(float)((100*(unsigned)content[0]+(unsigned)content[1])/1000.0)); 
    return 0; 
} 

說了這麼多,我真的不知道爲什麼你沒有得到任何打印在所有...

+0

由於C99'main'作爲一個異常不需要'return'語句。 –

+0

float類型的變量參數會自動提升爲double,對不對?就像任何窄於int的整數將被提升爲int一樣。 –