[問題]為什麼輸出檔案沒有內容?

看板C_and_CPP作者 (BREAD)時間14年前 (2009/10/20 21:50), 編輯推噓3(3018)
留言21則, 3人參與, 最新討論串1/1
我是想寫一個程式 當遇到檔案中的行有 "[" 以及 空白行 時 他會跳過 並把沒有以上這兩種情形的行讀取並寫到新的檔案 但我新的檔案裡沒有內容 不知道是什麼原因 煩請大大幫忙解答 謝謝!! main(){ FILE *fp, *fw; char *s; int c; fp=fopen("f209.txt","r"); fw=fopen("new.txt","w"); while(( c=fgetc(fp))!=EOF){ if(c=='[' || isspace(c)){ for(c=fgetc(fp);c!='\n';c=fgetc(fp)); } else{ ungetc(c, fp); fgets(s,max,fp); fputs(s,fw); } } fclose(fp); fclose(fw); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.120.66

10/20 21:59, , 1F
為什麼要把好幾行放在同一行@@?
10/20 21:59, 1F

10/20 21:59, , 2F
我眼殘了... 好糟...
10/20 21:59, 2F

10/20 22:03, , 3F
fgets()那行應該犯了置底十誡之五吧??
10/20 22:03, 3F

10/20 22:04, , 4F
另外, 感覺這個判斷邏輯是錯的, 這樣做你只能判斷這一行
10/20 22:04, 4F

10/20 22:04, , 5F
的第一個字是[就跳到下一行去; 合理的作法應該是無論如
10/20 22:04, 5F

10/20 22:05, , 6F
何都先gets整行回來, 然後跑個迴圈判斷這一行裡有沒有你
10/20 22:05, 6F

10/20 22:05, , 7F
不要的char, 有就跳過繼續下一行, 無就寫入新檔案. 似乎
10/20 22:05, 7F

10/20 22:05, , 8F
這樣的邏輯才比較合理吧....@_@"
10/20 22:05, 8F

10/20 22:16, , 9F
另外建議, 開完檔還是檢查一下有沒有開成功比較保險:)
10/20 22:16, 9F

10/20 22:23, , 10F
其實我是希望一行中的第一個字如果有[就想跳過
10/20 22:23, 10F

10/20 22:25, , 11F
第二第三以後有呢?? 你的code判斷不到第一個之後的喔@@"
10/20 22:25, 11F

10/20 22:25, , 12F
謝謝大大提醒~改過十誡之五就有內容了~但邏輯還是有問題
10/20 22:25, 12F

10/20 22:26, , 13F
事實上整行gets回來就好, 因為無論這行要不要輸出到新
10/20 22:26, 13F

10/20 22:26, , 14F
file去, 你都要把它抓掉, 那幹麻不整行讀回來在判斷就
10/20 22:26, 14F

10/20 22:26, , 15F
因為我是想把第一個字有[符號的去掉~如果第二第三以後有
10/20 22:26, 15F

10/20 22:27, , 16F
好呢?? 用fgetc唯一的好處就是不用擔心char[]的大小吧??
10/20 22:27, 16F

10/20 22:28, , 17F
不理它
10/20 22:28, 17F

10/20 22:29, , 18F
好吧, "當遇到檔案中的行有 "[" 以及 空白行 時" 你的描
10/20 22:29, 18F

10/20 22:30, , 19F
述讓我誤解了~_~ 不過作法也沒什麼變, 只是本來fgets回
10/20 22:30, 19F

10/20 22:30, , 20F
我再試試看~~因為我也是新手~謝謝大大的指點
10/20 22:30, 20F

10/20 22:30, , 21F
來整行不用從頭到尾判斷, 只要判斷s[0]就好@_@"
10/20 22:30, 21F
文章代碼(AID): #1AtS0R49 (C_and_CPP)