Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 同一函数的两个不同参数,但返回不同的结果?_C_Function_Arguments - Fatal编程技术网

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:输出不同,因为数组后面的数据不同。一个字符串后面紧接着第二个副本的可能性不大,这会以一种方式影响计算,而第二个字符串后面有一些其他数据,从而产生不同的答案。