2017-03-03 92 views
-1

我寫一個程序,它需要從用戶的整條生產線的輸入沒有工作, 然後解析整數到一個數組中,並最終計算出的平均值和最接近值平均。在if語句C型雙比預期

我運行Windows 10,開發的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; 

} 

有另一種方式來比較比isless功能以外的2個值? 該程序的測試運行給出以下輸出: Test Output

請讓我知道是否存在另一種方法來做比較在最後如果。

回答

0

我認爲這個問題是你的邏輯.. 您需要更新,只要你更新索引的最小差值。

試試這個:

if(isless((fabs(array[i])-fabs(average)),difference)) 
{ 
    index=i; 
    difference=fabs(fabs(array[i])-fabs(average)); 
} 
+1

你是對的!我試圖更新差異,現在按預期工作!感謝您的幫助! –