[問題] C - 含有fwrite的迴圈變成無限循環
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Code::Blocks, GNU GCC, Windows 7
問題(Question):
這是一個以含有以fread回傳值作while迴圈判斷式的檔案處裡程式
但每次執行總會陷入無窮迴圈,同時檔案不斷增大
上網查了一下很有可能是fwrite會使檔案增大因而無法讀到eof
但我已經將fread寫在while的條件式裡頭,
每次寫入之前應該就會進行判斷是否讀到結尾
不知是否跟我使用的變數類型有關(unsigned long)?
程式碼(Code):(請善用置底文網頁, 記得排版)
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *img = fopen("image.bmp", "r+b");
if (img == NULL) {
perror("");
return 1;
}
fseek(img, 10, SEEK_SET);
long off = 0;
fread(&off, 4, 1, img);
fseek(img, off, SEEK_SET);
unsigned long buf = 0;
while(fread(&buf, 4, 1, img)){
printf("%lXh\n", ftell(img));
//除錯用,把檔案指標位置輸出在螢幕上
buf = ((buf << 4) & 0xF0F0F0F0) | ((buf >> 4) & 0xF0F0F0F);
//這段是主要的處理
fseek(img, -4, SEEK_CUR); //倒退回讀入資料的位置
fwrite(&buf, 4, 1, img); //覆蓋原本資料
}
fclose(img);
return 0;
}
補充說明(Supplement):
個人非程式設計相關科系出身,在課堂上只學到了基礎的C/C++
加上有段時間沒有碰程式語言了,可以說是沒啥底子,現在都靠網路資料自學
在不知如何除錯後,決定快速複習一下十誡與板規然後在這裡第一次發問
如果我犯了甚麼常見錯誤也請直接指出
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.118.61
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1435051834.A.E44.html
→
06/23 21:46, , 1F
06/23 21:46, 1F
→
06/24 01:22, , 2F
06/24 01:22, 2F
→
06/24 01:24, , 3F
06/24 01:24, 3F
→
06/24 10:29, , 4F
06/24 10:29, 4F
推
06/24 12:33, , 5F
06/24 12:33, 5F
推
06/24 16:37, , 6F
06/24 16:37, 6F
→
06/24 17:05, , 7F
06/24 17:05, 7F
→
06/24 17:06, , 8F
06/24 17:06, 8F
→
06/24 17:11, , 9F
06/24 17:11, 9F
推
06/24 22:01, , 10F
06/24 22:01, 10F
→
06/24 22:01, , 11F
06/24 22:01, 11F
→
06/24 22:02, , 12F
06/24 22:02, 12F
→
06/24 22:02, , 13F
06/24 22:02, 13F
→
06/24 22:02, , 14F
06/24 22:02, 14F
→
06/24 22:04, , 15F
06/24 22:04, 15F
→
06/24 22:24, , 16F
06/24 22:24, 16F
→
06/24 22:25, , 17F
06/24 22:25, 17F
→
06/24 22:25, , 18F
06/24 22:25, 18F
推
06/28 10:13, , 19F
06/28 10:13, 19F
→
06/28 10:14, , 20F
06/28 10:14, 20F
推
06/30 13:22, , 21F
06/30 13:22, 21F
→
06/30 13:23, , 22F
06/30 13:23, 22F
→
06/30 13:25, , 23F
06/30 13:25, 23F
→
07/01 03:05, , 24F
07/01 03:05, 24F
→
07/01 03:07, , 25F
07/01 03:07, 25F
→
07/01 03:09, , 26F
07/01 03:09, 26F
→
07/01 03:14, , 27F
07/01 03:14, 27F
→
07/01 03:16, , 28F
07/01 03:16, 28F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):