C 同一函数的两个不同参数,但返回不同的结果?
我做了一个函数,可以将纬度和经度的格式从度-分-米转换为十进制度 例如:C 同一函数的两个不同参数,但返回不同的结果?,c,function,arguments,C,Function,Arguments,我做了一个函数,可以将纬度和经度的格式从度-分-米转换为十进制度 例如: latitude = 3130.1245 (Degrees Minutes.m) == 31.502075 (Decimal Degrees) 问题是我用同一个参数调用这个函数两次,但它返回两个不同的结果。这是怎么发生的 这是我的密码: double Format(char *array){ double Degrees = 10*(array[0]-'0')+(array[1]-'0'); int i;
latitude = 3130.1245 (Degrees Minutes.m) == 31.502075 (Decimal Degrees)
问题是我用同一个参数调用这个函数两次,但它返回两个不同的结果。这是怎么发生的
这是我的密码:
double Format(char *array){
double Degrees = 10*(array[0]-'0')+(array[1]-'0');
int i;
double z=0,N=10;
double x =0;
for(i=2;array[i]!='\0';i++){
if(array[i]=='.'){
for(i=i+1;array[i]!='\0';i++){
z=z+((array[i]-'0')/N);
N=N*10;
}
}
else
x=x*10+(array[i]-'0');
}
double Minutes = (x+z)/60 ;
return Degrees+Minutes ;
}
int main(){
char lat[]="3031.1234";
char lon[]="3031.1234";
double latitude ;
double longitude ;
latitude = Format(lat);
longitude = Format(lon);
printf("%lf\n",latitude); // output : 30.518723
printf("%lf\n",longitude); // output : 5247.185390
return 0 ;
}
会是这样吗
- 内环以指向
的0
结束李>i
- 然后在外循环中有
李>i++
- 导致访问数组边界之外的元素(以及未定义的行为)
- 内环以指向
的0
结束李>i
- 然后在外循环中有
李>i++
- 导致访问数组边界之外的元素(以及未定义的行为)
- 会是这样吗
%lf
打印双精度
,只需要%f
。最终重现-您需要添加中断代码>在内部循环之后,您将如何处理3位数的度数(经度范围为-180..-100和+100..+180)?我无法用以下代码重现您的错误我测试了您的代码,它工作正常。您不需要%lf
打印双精度,您只需要%f
。最终复制-您需要添加中断代码>在内部循环之后,您将如何处理3位数的度数(经度范围为-180..-100和+100..+180)?数组[i]!='\0',当内循环完成其工作时,此条件将终止外循环。我认为,如果内循环周围有
,则在结束之前有一个中断
。@AbdelrahmanTarief:是的,但是外循环会在数组结束后增加I
,因此是不确定的行为。我想问的是,当输入相等时,输出怎么可能不同?@AbdelrahmanTarief:输出不同,因为数组后面的数据不同。一个字符串后面紧接着第二个副本的可能性不大,这会以一种方式影响计算,而第二个字符串后面有一些其他数据,从而产生不同的答案。数组[i]!='\0',当内循环完成其工作时,此条件将终止外循环。我认为,如果内循环周围有
,则在结束之前有一个中断
。@AbdelrahmanTarief:是的,但是外循环会在数组结束后增加I
,因此是不确定的行为。我想问的是,当输入相等时,输出怎么可能不同?@AbdelrahmanTarief:输出不同,因为数组后面的数据不同。一个字符串后面紧接着第二个副本的可能性不大,这会以一种方式影响计算,而第二个字符串后面有一些其他数据,从而产生不同的答案。