2014-05-18 88 views
0

我已經知道可以將0-255的數字存儲在char數據類型中。所以,我想下面的代碼:將整數存儲在字符數組中並添加

#include <stdio.h> 

int main() 
{ 
    unsigned char num[4]; 
    int sum=0; 
    int i=0; 

    printf("Enter Four Digit Number\n"); 

    while(i<4) 
    { 
     scanf("%1d",&num[i]); 
     i++; 
    } 

    sum=(int)num[0]+(int)num[1]+(int)num[2]+(int)num[3]; 

    printf("Sum of digits: %d",sum); 
    return 0; 
} 

這似乎運行正常,但只要我把下面的代碼在while循環中,i變化值爲零每次循環重申時間和代碼中斷:

sum=sum+(int)(num[i]); i++; 

我用MinGW編譯器使用code :: blocks。

+0

_'是否可以將數字從0-255存儲在char數據類型中'_'uint8_t'可以做到這一點嗎?!? –

+0

這是無符號字符數組,我想;所以2^8 = 256? – Dvorak

+8

您不能使用指向'char'的指針來存儲'%d'格式的結果;它期望一個指向整數的指針。你的'scanf'可能會損壞堆棧中的內存。你的編譯器應該警告你這個。 –

回答

-2

這對我很好。

while(i < 4){ 
    scanf("%1d", &num[i]); 
    sum += (int)(num[i++]); 
} 
+0

問題不在於他是否應該使用ffs的無符號字節。 – user3152069

+0

它似乎不適用於我的編譯器。我不知道爲什麼,只要遇到這個聲明,i的值就被賦值0。編輯爲 – Dvorak

2

是非常非常小心,當你使用字符類型來存儲數字。 signed char的範圍可能因您的編譯器和操作系統而異。大多數情況下,最小值是-128,最大值是127.在其他情況下,它可能會有所不同。當您預計範圍從0-255時,這可能會產生問題。如果您想使用char來存儲數字,請使用unsigned char,因爲它的範圍是0-255。

由於字符(有符號或無符號)的數字表示沒有被保留,所以我通常通過編寫一個函數來處理問題,該函數使用數組來分配和查找數值。 (但是,我幾乎從來沒有做到這一點,它更容易使用的整數...)

-1

,如果你想添加的整數值到特定指數

char a[10]; 
int i=9; 

a[2]=boost::lexical_cast<char>(i) 

發現這是轉換字符的最佳方式進入int,反之亦然。

+0

爲特定的索引值添加一個整數。 – pari

相關問題