比较浮点数组中的值时出错

Error when comparing values in float array

我做了一个程序,以数组结构的形式计算和存储数据,在代码的最后,我会找到速度最慢和最大的车牌speed.BUT我遇到了一个奇怪的输出对于“找到最慢的车段”。

它显示了这样的东西 最慢速度 = 0.000000 汽车 = 6954000

最快速度 = 300.000000 汽车 = 13 进程返回 9 (0x9) 执行时间:24.881 秒 按任意键继续。

//这很奇怪,因为“最快”可以工作,但最慢的就不能工作//

#include <stdio.h>

struct Car
{
    int plate;
    float time,distance,speed;

};

int main ()
{
    int n;
    struct Car car[10];
    int fcar,scar;
    for (n=1;n<=10;n++){

        printf ("\nPlate = ");
        scanf("%d",&car[n].plate);

        printf ("Distance = ");
        scanf("%f",&car[n].distance);

        printf ("Time = ");
        scanf("%f",&car[n].time);

        (car[n].speed) = (car[n].distance)/(car[n].time);
        printf ("Speed = %f",car[n].speed);
//-----------------------------------------------------------------//
        if (car[n].speed< 70){
            printf("\nSlow\n");

        }else if (car[n].speed>=70 && car[n].speed<110){
            printf("\nNormal\n");

        }else{
            printf("\nFast\n");

        }

        printf("-----------------------------------------------------");
    }


    float minn = car[0].speed;
    for (n=1;n<=10;n++){
        if ( car[n].speed < minn){
            minn = car[n].speed;
            scar = car[n].plate;
        }
    }
   printf("\n\nSlowest speed = %f",minn);
    printf("\nCar = %d",scar);

    float maxx = car[0].speed;
    for (n=1;n<=10;n++){
        if ( car[n].speed > maxx){
            maxx = car[n].speed;
            fcar = car[n].plate;
        }
    }
   printf("\n\nFastest speed = %f",maxx);
    printf("\nCar = %d",fcar);




    }

//-------------------------------

“这很奇怪,因为“最快”可以工作,但最慢的就不能工作”

您的代码可能会调用 undefined behavior。继续阅读...

数组:

   struct Car car[10];

定义一个有 10 个元素的数组,因为 C 数组是从零开始的),它们的索引范围是 0 - 9。而不是 1 - 10。所以语句:

for (n=1;n<=10;n++){

在 'n == 10' 达到 索引超出范围 ,它将尝试写入不属于您的进程的内存。请注意,尽管这将在没有警告的情况下编译,甚至可能 出现 工作一段时间,但它始终有可能在 运行 时调用 undefined behavior,导致您的程序崩溃,似乎没有任何原因。

更改为:

for (n=0;n<10;n++){

注意:同样的错误出现在两个地方。对两者应用相同的编辑。

旁白:关于以下初始化:

     float minn = car[0].speed;

我建议使用一个明确较大的值,这样它可以保证在第一次测试期间触发最小值,例如:

  float minn = 200.0f;   

因为这个值超出了将为 minn 测量的任何可能值的范围,因此迫使第一个测试进行新的测试 与 maxx 初始化类似。例如;

 float maxx = -1.0f;