[英]Error when comparing values in float array
我做了一個程序,以數組結構的形式計算和存儲數據,在代碼的最后,我會找到速度最慢的車牌。部分”。
它顯示類似這樣的東西 最慢的速度 = 0.000000 汽車 = 6954000
最快速度 = 300.000000 Car = 13 進程返回 9 (0x9) 執行時間:24.881 s 按任意鍵繼續。
//這很奇怪,因為“最快的”可以工作,但最慢的卻不能//
#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);
}
//-------------------------------
“這很奇怪,因為‘最快的’可以工作,但最慢的卻不能” 。
您的代碼可能會調用未定義的行為。 繼續閱讀...
數組:
struct Car car[10];
定義一個具有 10 個元素的數組,並且因為 C arrays 是從零開始的),它們的索引范圍是 0 - 9。不是 1 - 10。所以語句:
for (n=1;n<=10;n++){
在“n == 10”處達到索引超出范圍,它將嘗試寫入不屬於您的進程的 memory。 請注意,盡管這將在沒有警告的情況下編譯,甚至可能會工作一段時間,但它總是有可能在運行時調用未定義的行為,從而導致您的程序無緣無故地崩潰。
改成:
for (n=0;n<10;n++){
注意:同樣的錯誤出現在兩個地方。 對兩者應用相同的編輯。
旁白:關於以下初始化:
float minn = car[0].speed;
我建議使用顯式較大的值,以保證在第一次測試期間觸發最小值,例如:
float minn = 200.0f;
因為這個值超出了 minn 測量的任何可能值的范圍,因此強制第一個測試為 maxx 初始化創建一個新的相似值。 例如;
float maxx = -1.0f;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.