2016-01-28 43 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中,并且元素应与其他元素进行比较。