c++字符转换成数字问题.

来源:百度知道 编辑:UC知道 时间:2024/06/04 00:26:00
gets(d);
for(i=0;i<strlen(d);i++)
d[i]=d[i]-'0';
for(i=0;i<strlen(d);i++)
h=h*10+d[i];
printf("%d\n",h);

我输入101 结果输出的为什么是1呢?
那该怎么样才能 输入字符101 出来的是数字101呢?

因为你的循环每次都调用strlen(d);
当i = 1是,d[i] = '0', 但是它的ASCII码是48; d[i] = d[i] - '0'后,d[i] = '0', 它的ASCII是0, 对照ASCII表,他对应的字符是nul, 即系统把它当作一个'\0'。而strlen(d)遇到'\0'就结束了。
所以就是1了,修改:

增加一条语句,int len = strlen(d);//把长度先保存下来
然后把两个for循环改成如下形式:
for(i=0;i< len;i++)
for(i=0;i < len;i++)

gets(d);
int result = 0;
for(i=0;i<strlen(d);i++)
{
result = result *10;
result += d[i]-'0';
}
printf("%d\n",result );

char d[3];
gets(d);
int h=0;

for(int i=0;i<3;i++)
d[i]=d[i]-'0';
for(i=0;i<3;i++)
h=h*10+d[i];
printf("%d\n",h);

printf("Hello World!\n");
return 0;
我这样测试的没问题啊。