【问题标题】:Two different arguments for the same function but return different results?同一个函数的两个不同参数但返回不同的结果?
【发布时间】:2015-05-01 22:11:02
【问题描述】:

我制作了一个函数,可以将纬度和经度的格式从 Degrees Minutes.m 转换为 Decimal Degrees。

例如:

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 ;
}

【问题讨论】:

  • 我无法使用以下代码重现您的错误
  • 我测试了你的代码,它运行良好。
  • 你不需要%lf来打印double,你只需要%f
  • 终于转载了——需要在inner loop后面加上break;
  • 您将如何处理 3 位数的度数(经度在 -180..-100 和 +100..+180 范围内)?

标签: c function arguments


【解决方案1】:

会不会是这样的

  • 内循环以i 指向0 结束;
  • 那么外循环中有i++
  • 导致访问数组边界之外的元素(以及未定义的行为)?

【讨论】:

  • array[i]!='\0' ,当内循环完成工作时,此条件将终止外循环。
  • 我认为,一个合理的解决方法是在内循环周围的if 结束之前使用break
  • @AbdelrahmanTarief:是的,但是外部循环会在数组末尾增加i,因此行为不确定。
  • 我在问当输入相等时输出怎么会不同?
  • @AbdelrahmanTarief:输出不同,因为数组后面的数据不同。一个字符串后面有第二个副本的可能性适中,这会以一种方式影响计算,而第二个字符串后面有一些其他数据,会产生不同的答案。
猜你喜欢
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多