剛剛在寫一個算資訊增益(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
04/13 19:08, 1F
推
04/13 19:08, , 2F
04/13 19:08, 2F
→
04/13 19:09, , 3F
04/13 19:09, 3F
推
04/13 19:12, , 4F
04/13 19:12, 4F
→
04/13 19:12, , 5F
04/13 19:12, 5F
→
04/13 19:13, , 6F
04/13 19:13, 6F
→
04/13 19:13, , 7F
04/13 19:13, 7F
→
04/14 01:05, , 8F
04/14 01:05, 8F
→
04/14 01:06, , 9F
04/14 01:06, 9F
※ 編輯: dancs96 來自: 118.169.57.32 (04/14 02:35)
→
04/14 02:42, , 10F
04/14 02:42, 10F
→
04/14 02:43, , 11F
04/14 02:43, 11F
→
04/14 02:44, , 12F
04/14 02:44, 12F
→
04/14 02:45, , 13F
04/14 02:45, 13F
推
04/14 09:42, , 14F
04/14 09:42, 14F
→
04/14 09:42, , 15F
04/14 09:42, 15F
→
04/14 09:43, , 16F
04/14 09:43, 16F
→
04/14 09:44, , 17F
04/14 09:44, 17F
→
04/14 14:35, , 18F
04/14 14:35, 18F
討論串 (同標題文章)