2012-12-07 45 views
0

我剛剛開始與C和我試圖學習ATOL功能。有人能告訴我爲什麼它一直打印0?我知道這意味着轉換無法執行,但我不知道爲什麼。爲什麼ATOI在此代碼中返回0?

#include <stdio.h> 
#include <stdlib.h> 

int main (void) 
{ 
    int i = atoi (" bl149"); 
    printf("%d\n", i); 
    return 0; 
} 
+4

'B'不是一個十進制數。 – Mat

+1

只看到這一個 - http://stackoverflow.com/questions/2729460/why-do-i-get-this-unexpected-result-using-atoi-in-c?rq=1 – nightlytrails

+0

首先,C是一個案例敏感語言。所以這應該是'atoi',而不是'ATOI'。其次,在你的問題的主體中,你正在談論一些'ATOL'功能。那麼,它是'ATOI'還是'ATOL'? – AnT

回答

5

的atoi基本上轉化爲具有串號整數之一,無論它會轉換,這將成爲它的返回值。 OR 更精確的atoi功能開始從字符串的開始檢查。如果它有數字(僅從開始),那麼它將返回整數值。 下面的例子將清除概念 例如

atoi("1234") 
--> it will convert string "1234" in to integer and return it 
     --> i.e. ouput is 1234 
atoi("1234abcd") --> i.e. ouput is 1234 
atoi("a1234abcd") --> i.e. ouput is 0 

在你的情況下,由於您的字符串從B開始(」 b1149" ),所以它會返回0

+0

好吧,這是有道理的 - 所以它必須以一個整數開始。我明白你的意思,我認爲它能夠從任何字符串中獲取一個整數,而不管字符。謝謝! –

2

你到底明白了什麼? " bl149"不是有效的數字表示。因此,atoi返回0,因爲它在錯誤輸入的情況下始終如此。這裏的所有都是它的。

的有效表示可以從空白字符的序列開始,但它必須跟一個可選的+/-和十進制數字的序列。您的空格序列後跟bb不是十進制數字。

你是怎麼想到它的工作?你認爲atoi在這種情況下做什麼?

相關問題