C 为什么我在这里得到垃圾值?

C 为什么我在这里得到垃圾值?,c,C,这是一个将存储在字符串中的整数转换为整数的程序。请帮助 #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&

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

 #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;
}
#包括
#包括
int main()
{
int num,n,i;
num=0;
printf(“输入n\n”);
scanf(“%d”和“&n”);
字符串[n+1];
printf(“输入数字”);
scanf(“%s”,字符串(&s);
对于(i=0;字符串[i]!='\0';i++)
{
num=num+string[i]*pow(10,n-i-1);
}
printf(“所需数字为%d”,num);
返回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
)的位置传递了指向数组的指针。应删除
&

在代码中,字符串的大小必须等于n+1,因此可以删除所有这些内容

对于(int i=strlen(string)-1;i>=0;i--)

我从字符串中的最后一个字符开始到第一个字符,然后将每个字符乘以j(j=1,j=10,j=100…)

#包括
#包括
int main()
{
int j=1;
字符串[100];
printf(“输入数字”);
scanf(“%s”,字符串);
int num=0;
对于(int i=strlen(string)-1;i>=0;i--)
{
int k=string[i]-“0”;//用“0”减去每个大小写
num=num+k*j;
j=j*10;
}
printf(“所需数字为%d”,num);
返回0;
}

调试器是您的朋友。使用开发工具随附的调试器逐步完成程序,并密切注意程序在哪里执行意外操作,如存储错误的值或采用错误的路径。意外几乎总是一个bug。剩下的时间是不正确的期望值,这也需要修正。关于
pow
pow
的警告作用于浮点数和。你认为你得到了100,但有时你真的得到了99.99999999,当转换成整数时,分数部分没有舍入,它被丢弃,你得到99。注意:变长
字符串
没有什么意义
int
只能表示有限的位数,通常为10位,因此允许用户输入长度超过10位的字符串将导致错误答案。我的答案是否为false?否。只是比需要的速度慢一些,并且可以使用一点输入验证来确保用户不键入字母。还要记住,
int
可能不能容纳超过10或20个数字,因此允许用户输入超过10或20个数字将导致错误。现在解释就足够了。没关系,谢谢
printf("Enter n\n");
scanf("%d", &n);
char string[n+1];
#include<stdio.h>
#include<math.h>

int main()
{
   int j=1;
   char string[100];
   printf("Enter the number\n");
   scanf(" %s", string);

   int num=0;

   for(int i=strlen(string)-1;i>=0;i--)
   {
       int k=string[i]-'0';//subtract each case by '0'
       num=num+k*j;
       j=j*10;
   }
   printf("The required number is %d", num);
   return 0;
}