在这个简单的程序中看不到逻辑问题

标签 c

我编写了这个程序,它应该读取数字,计算中间值并打印最接近的数字。

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

但有时我会得到类似的东西

input 50 50 50 500 24 20 (ok)

media 116 (ok)

prints 24 (?)

最佳答案

  • Int main()应该是int main(void)
  • 请勿使用fflush(stdin) ,这是未定义的行为。
  • 条件dist[i] < dist[i + 1]是错的。应该是dist[i] < dist[i2]因为最佳元素的索引应该存储在 i2 中并且该元素应该与其他元素进行比较。

关于在这个简单的程序中看不到逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35063485/

相关文章:

c - STM Nucleo I2C 未发送所有数据

c++ - libvlc 的手册页

c - 使用字符串指针问题结构查找表

c - 数组成员定义为常量

c - 从 linux 内核模块发送数据

c - 新声明后内存地址是否改变?

c - C 矩阵的转置(行主序)

C 中字符与字符串的比较

c - 如何打印单个字符的可变长度字符串

c - 格式 '%s' 需要类型为 'char *' 的参数,但参数 2 的类型为 'char **'