2016-01-28 42 views
-1

我編寫了這個程序,它應該讀取數字,計算中間值並打印出最接近的數字。在這個簡單的程序中看不到邏輯問題

#include<stdio.h> 
int main(){ 
    const int num = 6; 

    int i, i2 = num - 1; 
    float numeros[num], dist[num]; 
    float media = 0; 

    for (i = num - 1; i >= 0; i--){ 
     printf("Digite um numero\n"); 
     scanf("%f", &numeros[i]); 
     media = media + numeros[i]; 
    } 
    media = media/num; 
    for (i = num - 1; i >= 0; i--){ 
     if (numeros[i] <= media){ 
      dist[i] = media - numeros[i]; 
     } 
     else{ 
      dist[i] = numeros[i] - media; 
     } 
    } 
    for (i = num - 2; i >= 0; i--){ 
     if (dist[i] < dist[i + 1]){ 
     i2 = i; 
     } 
    } 
    printf("O numero mais proximo da media '%1.0f' eh '%1.0f'", media, numeros[i2]); 

    printf("\n\nPressione 'Enter' para sair"); 
    fflush(stdin); 
    getchar(); 
return 0; 
} 

但有時我得到的東西像

輸入50 50 50 500 24 20(OK)

媒體116(OK)

打印24(?)

+7

'fflush(stdin);'是未定義的行爲。 – Downvoter

+0

你沒有檢查'scanf()'的返回值。 –

+0

'Int main()'應該是'int main(void)' – MikeCAT

回答

5
  • Int main()應該是int main(void)
  • 請勿使用fflush(stdin),這是未定義的行爲。
  • 條件dist[i] < dist[i + 1]是錯誤的。它應該是dist[i] < dist[i2],因爲最佳元素的索引應存儲在i2中,並且元素應與其他元素進行比較。