首页 > 解决方案 > 为什么我在这里得到垃圾价值?

问题描述

它是一个将存储在字符串中的整数转换为 int 的程序。请帮忙。

 #include<stdio.h>
 #include<math.h>
 int main()
{
int num, n, i;
num = 0;
printf("Enter n\n");
scanf("%d", &n);
char string[n+1];
printf("Enter the number\n");
scanf("%s", &string);
for(i=0;string[i]!='\0';i++)
{
    num = num + string[i]*pow(10,n-i-1);
}
printf("The required number is %d", num);
return 0;
}

标签: c

解决方案


在典型环境中,数字的字符代码不等于数字所代表的数字。

C中数字的字符代码被定义为连续的,因此您可以通过'0'从字符代码中减去将字符代码转换为相应的数字。

    num = num + (string[i]-'0')*pow(10,n-i-1);

顺便说一句,有一些更好的方法可以进行转换:

sscanf(string, "%d", &num); /* available in stdio.h */
num = atoi(string); /* stdlib.h is required for atoi() */

另请注意,这会scanf("%s", &string);调用未定义的行为char*,因为在需要(指向 的指针)的地方传递了指向数组的指针char&应该被删除。


推荐阅读