2016-05-30 106 views
-1

與此相關的問題,我已經檢查了其他職位已經使用了atoi函數將字符串轉換,但值始終爲0轉換字符數組ATOI失敗

這裏都存儲在hold4值:

char hold4[4] = { "0", "." , "1", "5", "\0"); 

我然後嘗試轉換爲int,我得到

int hm = atoi(hold4); 

hm打印出爲:

hm = 0 

我希望hm是0.15,因爲這是在hold4值。我想在隨後的數學運算中使用這個值。

這裏是我的代碼:

int x = 0; 
int pixel = 0; 
char hold[10]; 
char hold4[4]; 

for(x=0; x < linesCount; x++) 
{ 
    fscanf(model, "%c", &hold[x]); 
    if(hold[x] == '\0' || hold[x] == '\r' || hold[x] == '\n') 
    { 
     hold4[0] = hold[x-4]; 
     hold4[1] = hold[x-3]; 
     hold4[2] = hold[x-2]; 
     hold4[3] = hold[x-1]; 
     hold4[4] = '\0'; 
    // printf("new line: break\n"); 
    } 
    //printf("pixel: %c\n", hold[x]); 
} 

int hm = atoi(hold4); 

printf("\nhold4: %d\n", hm); 

如何使這項工作?

+0

你沒注意到你在宣佈僅4保存數組中把5個值? –

+0

您的代碼應該會生成大量的編譯器警告,用於將指針轉換爲char。您嘗試使用初始化程序將'char *'存儲到您的'char'中!編譯器警告/錯誤不僅僅是爲了好玩! – Olaf

回答

4

您缺少整數的整點。整數是一個整數(1,2,3,4 ...),不能有小數點。你在找什麼是浮動/雙。

Try with this: atof()

+0

謝謝,完美的作品。在此期間,我經歷了將1和5轉換爲atoi然後將該數字除以100得到0.15浮點數的麻煩。但atof只是正是我想要的。謝謝 – user3622460

+1

我很高興我的幫助。只需接受我的或Michaels的回答,以便將來的問題得到解答以供將來參考。 – Mirakurun

2

atoi函數將「字符數組」轉換爲「整數」,因此名稱:(a)rray(to)(i)nt。

您的字符數組有小數位,但atoi只能轉換0-9範圍內的字符;它不會返回浮點值。

請注意,您的變量hm是明確的int類型,你打印的值與%d,還明確int。您已經完成了所有必要的工作,以確保唯一的可能性是int值。

+0

謝謝,明白了! – user3622460

0
char hold4[5] = { '0', '.' , '1', '5', '\0'}; 
double a = atof(hold4); 
printf("%f",a); 

試試這個