我试图使用以下代码将数字字符串转换为整数值。输出始终小于原始值。我没有弄错我的代码。
#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;
}
答案 0 :(得分:3)
问题很可能是未定义的行为,因为您使用了未初始化的变量。
在表达式b=b+...
中,您使用变量b
而不首先初始化它。非静态局部变量未初始化,并且具有 indeterminate 值。使用它们而不进行初始化会导致UB。将其初始化为零:
int i, b = 0;
用户输入数组a
的多个字符并超出范围也会遇到问题。您也没有任何用户实际只输入数字的检查。
答案 1 :(得分:0)
您的代码中存在一些问题。为了降低 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;
}