C 从不同的编译器获得不同的输出

C 从不同的编译器获得不同的输出,c,string,C,String,问题是: 定义一个函数getint(),它将从键盘接收一个数字字符串,将其转换为整数,并将整数返回给调用函数 我的代码是: #include<stdio.h> #include<math.h> #include<string.h> int getint(); int main() { int a; a = getint(); printf("you entered %d",a); return 0; } int getin

问题是: 定义一个函数getint(),它将从键盘接收一个数字字符串,将其转换为整数,并将整数返回给调用函数

我的代码是:

#include<stdio.h>
#include<math.h>
#include<string.h>

int getint();

int main()
{
    int a;
    a = getint();
    printf("you entered %d",a);
    return 0;
}

int getint()
{
    char str[10];

    printf("Enter number: ");
    gets(str);


    int d=0,len = strlen(str),r = len-1;

    for(int i=0;str[i] != '\0';i++,r--)
        d += (str[i]-48)*pow(10,r);

    return d;
}
但是当我使用onlinegdb.com/online_c_编译器时,输出是正确的


那么,对于同一个程序,
pow
函数使用浮点数时,不同编译器的输出会有什么不同呢。因此,结果可能并不完全等于您期望的数值结果。例如,
pow(10,2)
可以输出略大于或略小于100的数字。如果结果刚好低于100,分数部分将被截断,剩下99

不要对整数幂使用
pow
,只需将
d
的当前值乘以10,然后再为下一个数字加上值即可

d = 10 * d + (str[i]-'0')

考虑到32位
int
可以容纳10位十进制数字,您的字符串不够长。有一个很好的理由说明不需要使用
pow
,它不会准确。要构建一个值,只需将当前值乘以
10
,然后添加下一个数字。因此
d=d*10+(str[i]-'0')
maybe
pow(10,2)
返回99.99999996535764结果取决于IDE的编译器?相关:哇。。成功了。但是,为什么在线编译器的结果在更正代码之前是正确的呢?@UTPAL不同的实现都有自己版本的
pow
,每个版本处理舍入的方式略有不同
d = 10 * d + (str[i]-'0')