[問題] 讀檔問題

看板C_and_CPP作者時間14年前 (2010/04/13 18:49), 編輯推噓3(3015)
留言18則, 3人參與, 最新討論串5/9 (看更多)
剛剛在寫一個算資訊增益(I.G)的程式 程式寫的很順利 但是結果一直跑不出來 後來發現原因在於fscanf一直回傳EOF 程式片段如下: Bno=0;w=0; y=0; while( feof(Blist)==0 ){ fscanf(Blist,"%s\n",TempName); //AnsiString StrTemp=AnsiString(TempName); Bno++; //comput w,y if(( B=fopen(TempName,"r") )==NULL){ printf("%d\n",errno); return -1; } while( feof(B)==0 ){ fscanf(B,"%s\n",p2); if( strcmp(p1,p2)==0 ){ y=y+1; fclose(B); break; } } } w=Bno-y; 程式中應該要將檔案指標B 指向檔案的內容複製到p2中做後續的比對 但是程式"完全讀取不到"B的內容 (並不是讀到檔尾才出錯,而是一開始就讀不到) 其中最重要出錯的就是下面這段啦! while( feof(B)==0 ){ fscanf(B,"%s\n",p2); ....... } 檔案指標 B 通過了feof(B)的檢測 確認指標還未讀到檔尾 但是在下一行fscanf(B,"%s\n",p2);時 p2卻一直讀不到字串 經過追蹤模式檢查fscanf一直回傳EOF 表示已經讀到檔尾 這使我的程式進入無窮迴圈 feof(B)==0 => fscanf=EOF => feof(B)==0 => fscanf=EOF => ........ 不知是哪出了問題 另外也用過了fgets fgetc 用了兩台不同主機 都出相同的結果 回傳EOF 請各位高手幫幫忙! ※ 編輯: dancs96 來自: 140.132.20.188 (04/13 18:56)

04/13 19:08, , 1F
讀檔的話是不是要用 B=fopen(TempName,"r") 呢?
04/13 19:08, 1F

04/13 19:08, , 2F
"a" mode不是開檔預備從檔尾繼續寫入用的嗎??
04/13 19:08, 2F

04/13 19:09, , 3F
你這樣fscanf讀不到資料不是很正常嗎??
04/13 19:09, 3F

04/13 19:12, , 4F
又, 你上一層while每一次都會重新fopen, 在沒有fread
04/13 19:12, 4F

04/13 19:12, , 5F
或fscanf真的撞到EOF之前, EOF bit不會設上, feof也自然
04/13 19:12, 5F

04/13 19:13, , 6F
抓不到, 所以B那個一開始一定測不對, 你就遇到無窮迴圈
04/13 19:13, 6F

04/13 19:13, , 7F
了; 解法應該就是j大說的修一下錯誤的fopen mode吧@_@"
04/13 19:13, 7F

04/14 01:05, , 8F
sorry是我PO文打錯了程式內是B=fopen(TempName,"r")沒錯
04/14 01:05, 8F

04/14 01:06, , 9F
另外問題解決了 方法是換IDE 改VC 就可以用了
04/14 01:06, 9F
※ 編輯: dancs96 來自: 118.169.57.32 (04/14 02:35)

04/14 02:42, , 10F
另外請教V大一下 雖說EOF bit不會設上 但是執行下一行
04/14 02:42, 10F

04/14 02:43, , 11F
fscanf(B,"%s\n",p2); 時傳回EOF 這時不就會設上EOF嗎?
04/14 02:43, 11F

04/14 02:44, , 12F
那為什麼會有一直進入迴圈問題呢? 照理說應滿足了
04/14 02:44, 12F

04/14 02:45, , 13F
feof(B)!=0這個條件了阿 應跳出迴圈才對吧!
04/14 02:45, 13F

04/14 09:42, , 14F
抱歉小弟我誤會了, 看到B那個while裡的if我以為執行到那
04/14 09:42, 14F

04/14 09:42, , 15F
總是會fclose, 這樣下一次從上一層while會重新開檔, 這
04/14 09:42, 15F

04/14 09:43, , 16F
時EOF才會永遠抓不到; 照您的描述與確定有用"r"還會這樣
04/14 09:43, 16F

04/14 09:44, , 17F
小弟就不知道是發現什麼事了. 原來有誤的開始環境是?_?
04/14 09:44, 17F

04/14 14:35, , 18F
原來是使用C++ Builder 5 我是開命令式專案 選純C選項
04/14 14:35, 18F
文章代碼(AID): #1Bn4n7em (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Bn4n7em (C_and_CPP)