[英]convert the numeric string to integer value
我正在尝试使用以下代码将数字字符串转换为整数值。 输出始终比原始值小一。 我没有弄明白我的代码有什么问题。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
int main(){
char a[6];
int i,b;
scanf("%s",a);
for(i=strlen(a)-1;i>=0;i--){
a[i]=a[i]-48;
b=b+a[i]*pow(10,(strlen(a)-i-1));
}
printf("%d",b);
getch();
return 0;
}
该问题很可能是未定义的行为,因为您使用了未初始化的变量。
在表达式b=b+...
,使用变量b
而不先对其进行初始化。 非静态局部变量不会被初始化,并且将具有不确定的值。 不进行初始化就使用它们会导致UB。 初始化为零:
int i, b = 0;
用户还会为数组a
输入许多字符并超出范围,这也会带来问题。 您也没有检查用户实际上仅输入了数字。
您的代码中几乎没有问题。 为了降低UB的风险:
char[]
视为字符串,则其大小应允许容纳\\0
终止字符。 int b
)。 scanf()
。 溢出导致UB。 使用字段宽度说明符。 pow()
返回值是double
)。 pow()
。 请根据您的代码查看注释:
#include <stdio.h>
#include <string.h>
int main(void)
{
char a[7]; // extra byte for '\0'
int i, l, b = 0;//initialize local variable b
int ten = 1;
scanf("%6s",a); //should use a field width specifier
l = strlen(a) - 1;
for( i=l ; i>=0 ; i--, ten*=10 )
b += (a[i]-48)*ten; //do as simple math as practical
printf("%d\n",b);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.