2012-12-07 44 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在这种情况下做什么?

相关问题