atoi 忽略要转换的字符串中的一个字母
atoi ignores a letter in the string to convert
我正在使用 atoi
将字符串 integer
值转换为整数。
但首先我想测试函数的不同情况,所以我使用了以下代码
#include <stdio.h>
int main(void)
{
char *a ="01e";
char *b = "0e1";
char *c= "e01";
int e=0,f=0,g=0;
e=atoi(a);
f=atoi(b);
g=atoi(c);
printf("e= %d f= %d g=%d ",e,f,g);
return 0;
}
此代码returnse= 1 f= 0 g=0
我不明白为什么 returns 1
for "01e"
那是因为 atoi
是一个不安全且过时的整数解析函数。
- 它在遇到非数字时解析并停止,即使文本是全局的不是数字。
- 如果第一个遇到的字符不是 space 或数字(或 plus/minus 符号),它只是 returns 0
祝你好运,确定用户输入是否对这些有效(至少 scanf
类型的函数能够 return 0 或 1 字符串是否根本不能解析为整数,即使它们与字符串 starting 和整数具有相同的行为)...
使用 strtol
等函数会更安全,它会检查整个字符串是否为数字,甚至能够告诉您在使用正确的选项集进行解析时,哪个字符无效。
用法示例:
const char *string_as_number = "01e";
char *temp;
long value = strtol(string_as_number,&temp,10); // using base 10
if (temp != string_as_number && *temp == '[=10=]')
{
// okay, string is not empty (or not only spaces) & properly parsed till the end as an integer number: we can trust "value"
}
else
{
printf("Cannot parse string: junk chars found at %s\n",temp);
}
你错过了一个机会:写你自己的atoi。将其称为 Input2Integer 或 atoi 以外的名称。
int Input2Integer( Str )
请注意,您有一个指向字符串的指针,您需要确定何时开始、如何计算结果以及何时结束。
首先:将 return 值设置为零。
第二:当字符串不为 null '\0' 时对其进行循环。
第三种:return当输入的字符不是有效数字时。
第四:根据有效输入字符修改return值
然后回来解释为什么 atoi 会这样工作。你将学习。我们会微笑。
我正在使用 atoi
将字符串 integer
值转换为整数。
但首先我想测试函数的不同情况,所以我使用了以下代码
#include <stdio.h>
int main(void)
{
char *a ="01e";
char *b = "0e1";
char *c= "e01";
int e=0,f=0,g=0;
e=atoi(a);
f=atoi(b);
g=atoi(c);
printf("e= %d f= %d g=%d ",e,f,g);
return 0;
}
此代码returnse= 1 f= 0 g=0
我不明白为什么 returns 1
for "01e"
那是因为 atoi
是一个不安全且过时的整数解析函数。
- 它在遇到非数字时解析并停止,即使文本是全局的不是数字。
- 如果第一个遇到的字符不是 space 或数字(或 plus/minus 符号),它只是 returns 0
祝你好运,确定用户输入是否对这些有效(至少 scanf
类型的函数能够 return 0 或 1 字符串是否根本不能解析为整数,即使它们与字符串 starting 和整数具有相同的行为)...
使用 strtol
等函数会更安全,它会检查整个字符串是否为数字,甚至能够告诉您在使用正确的选项集进行解析时,哪个字符无效。
用法示例:
const char *string_as_number = "01e";
char *temp;
long value = strtol(string_as_number,&temp,10); // using base 10
if (temp != string_as_number && *temp == '[=10=]')
{
// okay, string is not empty (or not only spaces) & properly parsed till the end as an integer number: we can trust "value"
}
else
{
printf("Cannot parse string: junk chars found at %s\n",temp);
}
你错过了一个机会:写你自己的atoi。将其称为 Input2Integer 或 atoi 以外的名称。
int Input2Integer( Str )
请注意,您有一个指向字符串的指针,您需要确定何时开始、如何计算结果以及何时结束。
首先:将 return 值设置为零。
第二:当字符串不为 null '\0' 时对其进行循环。
第三种:return当输入的字符不是有效数字时。
第四:根据有效输入字符修改return值
然后回来解释为什么 atoi 会这样工作。你将学习。我们会微笑。