我剛剛開始與C和我試圖學習ATOL功能。有人能告訴我爲什麼它一直打印0?我知道這意味着轉換無法執行,但我不知道爲什麼。爲什麼ATOI在此代碼中返回0?
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int i = atoi (" bl149");
printf("%d\n", i);
return 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;
}
的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
好吧,這是有道理的 - 所以它必須以一個整數開始。我明白你的意思,我認爲它能夠從任何字符串中獲取一個整數,而不管字符。謝謝! –
你到底明白了什麼? " bl149"
不是有效的數字表示。因此,atoi
返回0
,因爲它在錯誤輸入的情況下始終如此。這裏的所有都是它的。
的有效表示可以從空白字符的序列開始,但它必須跟一個可選的+/-
和十進制數字的序列。您的空格序列後跟b
。 b
不是十進制數字。
你是怎麼想到它的工作?你認爲atoi
在這種情況下做什麼?
'B'不是一個十進制數。 – Mat
只看到這一個 - http://stackoverflow.com/questions/2729460/why-do-i-get-this-unexpected-result-using-atoi-in-c?rq=1 – nightlytrails
首先,C是一個案例敏感語言。所以這應該是'atoi',而不是'ATOI'。其次,在你的問題的主體中,你正在談論一些'ATOL'功能。那麼,它是'ATOI'還是'ATOL'? – AnT