代碼似乎跳過while循環:C程序似乎跳過while循環
int i,j;
i= floor((Lx-23.61)/0.1);
j=0;
while(Nh - modSED[i][j] > 0.0){
j++;
}
if(j>0 && modSED[i][j]-Nh > Nh-modSED[i][j-1]){
fileNH=modSED[i][j-1];
}else{
fileNH=modSED[i][j];
}
它或多或少通過double數組(第i索引由的另一部分預設的粗線性搜索代碼,不應該是一個問題)。該代碼似乎當我看着GDB胡作非爲:
Breakpoint 1, mag (filter=4, Lx=23.930108812418158, z=0.57071772467724535, Nh=0.011911981460606383) at infopt.c:45
45 while(Nh-modSED[i][j]>0.0){
(gdb) print Nh-modSED[i][j]
$1 = 0.001911981460606383
(gdb) n
48 if(j>0 && modSED[i][j]-Nh > Nh-modSED[i][j-1]){
(gdb)
,它剛剛跳過J ++段,即使while循環應該評估爲true。
感謝, 喬希
您是否已優化開啓('-O')?如果是這樣,請禁用並重試。優化混淆了調試器。 – 2012-07-24 04:53:07
你可能也希望將類型轉換爲int,因爲floor函數返回一個double而不是一個整數,並且數組不能被索引爲 – Alex 2012-07-24 04:54:59
我的cflags是CFLAGS = -g3 -std = c99 -Wall -I $(IDIR)in the makefile,所以沒有優化。嘗試了類型轉換,並沒有改變行爲。 – jroz 2012-07-24 04:57:33