我正在编写一个程序,它将用户的输入作为整行, 然后将整数解析成一个数组,最终计算平均值和最接近平均值的值。
我正在运行Windows 10,Dev C ++ IDE和编译器TDM-GCC 4.9.2 64位
我读到双重比较是C中的一个问题所以我使用了isless()函数来获得更高的精度。 仍然由于某种原因,比较没有按预期进行。 到目前为止,这是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<float.h>
int main(){
char string[250];
//Prompt user to input sequence of integers
printf("Please enter the integer values: ");
//Read whole line from input
fgets (string, 250, stdin);
//Remove non-numeric characters from sequence and replace them with ' ' (space)
int j;
for(j=0; j<strlen(string); j++)
{
if(!isdigit(string[j]))
string[j] = ' ';
}
char *token;
char *rest = string;
int array[50]={0};
int i=0;
//Break string into Sub-tokens with ' ' as delimiter
// and parse them into an int array
while((token = strtok_r(rest, " ", &rest)))
{
array[i]=atoi(token);
i++;
}
double average,counter,sum;
i=0;
counter=0;
sum=0;
//Calculate the average
while(array[i]!=0)
{
sum=sum+array[i];
counter++;
i++;
}
average=sum/counter;
//printf("Counter %lf",counter);
//printf("sum %lf", sum);
printf("Average : %lf\n",average);
int index=0;
i=0;
double difference;
while(array[i]!=0)
{
if (i==0)
{
difference=fabs(fabs(array[0])-fabs(average));
}
if(isless((fabs(array[i])-fabs(average)),difference))
{
index=i;
}
printf("index %i difference %lf \n", index, fabs(fabs(array[i])-fabs(average)));
printf("i value %i \n",i);
i++;
}
printf("Closest element : %i\n", array[index]);
return 0;
}
有没有其他方法来比较无效函数以外的2个值? 程序的测试运行给出以下输出: Test Output
如果在最后一个if中存在另一种比较方式,请告诉我。
答案 0 :(得分:0)
我认为问题在于你的逻辑...... 每次更新索引时都需要更新最小差异。
试试这个:
if(isless((fabs(array[i])-fabs(average)),difference))
{
index=i;
difference=fabs(fabs(array[i])-fabs(average));
}