我刚刚开始与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