[問題] fseek

看板C_and_CPP (C/C++)作者 (Cobra)時間14年前 (2011/08/19 16:51), 編輯推噓1(1010)
留言11則, 4人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) LINUX 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) NO 問題(Question): fseek的語法問題, 與BMP讀檔相關 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) if(Used_Colors_Number == 0) { temp=(img->width*3)%4; if(temp) temp=4-temp; for( i=(img->height-1) ; i>=0 ; i-- ) { for( j=0 ; j<img->width ; j++ ) { fscanf(fptr, "%c%c%c",&img->RGB[(i*width+j)*3+0], &img->RGB[(i*width+j)*3+1], &img->RGB[(i*width+j)*3+2]); } fseek(fptr,temp,1); } } else { for( i=0 ; i<Used_Colors_Number ; i++ ) { fscanf(fptr, "%c%c%c",&((Used_Color+i)->B), &((Used_Color+i)->G), &((Used_Color+i)->R)); fseek(fptr,1,1); } temp=(width)%4; for( i=(height-1) ; i>=0 ; i-- ) { for( j=0 ; j<width ; j++ ) { fscanf(fptr, "%c",&Pixel); img->RGB[(i*width+j)*3+0] = Used_Color[Pixel].B; img->RGB[(i*width+j)*3+1] = Used_Color[Pixel].G; img->RGB[(i*width+j)*3+2] = Used_Color[Pixel].R; } fseek(fptr,temp,1); } } 補充說明(Supplement): 不懂的是, 為什麼fseek他那樣寫, 因為我上網查fseek沒人在第三個位置填入1, 我知道他fseek是怕圖檔一行超過4byte倍數的規定, 超過的部分想要用這個移, 但是我看不懂她為什麼第三個位置寫入1, 而且temp再換行的時候都不用加減運算@@ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.175.128.7

08/19 16:52, , 1F
1 == SEEK_CUR
08/19 16:52, 1F

08/19 16:53, , 2F
原來如此 囧@@
08/19 16:53, 2F

08/19 16:53, , 3F
順帶一提, SEEK_SET 是 0, SEEK_END 是 2
08/19 16:53, 3F

08/19 16:54, , 4F
不過還是建議用這些名字比較清楚
08/19 16:54, 4F

08/19 16:55, , 5F
謝謝你^^
08/19 16:55, 5F

08/19 16:58, , 6F
本來就應該使用巨集, 因為巨集常數所替換的值是任意的
08/19 16:58, 6F

08/19 16:59, , 7F
唯一能保證的只有"值不一樣"這一點
08/19 16:59, 7F

08/19 17:07, , 8F
原po還會回來看這篇嗎? 囧
08/19 17:07, 8F

08/19 17:10, , 9F
這個好像會喔
08/19 17:10, 9F

08/19 17:17, , 10F
因為這是別人寫的code, 加上對c沒這麼熟 所以只好發文
08/19 17:17, 10F

08/19 17:17, , 11F
問看看XD 謝謝各位幫忙解答^^
08/19 17:17, 11F
文章代碼(AID): #1EJYGj5c (C_and_CPP)
文章代碼(AID): #1EJYGj5c (C_and_CPP)