c - 为什么我在这里得到垃圾价值?
问题描述
它是一个将存储在字符串中的整数转换为 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中数字的字符代码被定义为连续的,因此您可以通过'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
。&
应该被删除。
推荐阅读
- reactjs - React 日期选择器:如何测试用户输入的有效性?
- php - Foreach 循环仅回显第一次出现(仅第一个元素)
- javascript - 如何在 jest 框架自动化中使用 `scollIntoView` 方法
- python - create_engine 使用 ssl 问题 sqlalchemy
- bash - 是否可以在 bash 中的 case 选择器中使用花括号?
- php - 在codeigniter中如何划分时间
- linux - 我无法从外部剪贴板粘贴到 vim
- javascript - javascript 和 node.js 中的异步和等待
- python - Python assertEqal 字符串 - 忽略它的一部分
- javascript - 接下来如何在 React SSR 框架中使用 TS+css+scss?