線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:953
推到 Plurk!
推到 Facebook!

關於fscanf的使用

答題得分者是:Zard
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-25 21:42:25 IP:219.68.xxx.xxx 未訂閱
我現在有一個txt檔 裡頭是 abaaaabbabaa 總共有8個 a 4個 b 以下是我的程式片斷 FILE *f; ... while(!feof(f)) { fscanf(f,"%c",&str); swith(str) { case 'a': counta ;break; case 'b': countb ;break; } } 可是當我結算出結果的時候 a : 9個 b:4個 我的問題是我的最後一個字元都會多算依次 請問各位大大我要如何解決這多做的依次 明明到檔案底部了為什麼還會多做依次呢?
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-25 22:18:58 IP:61.62.xxx.xxx 未訂閱
#include     int main(int argc, char* argv[])
{
  FILE *f;
  char str;
  int counta = 0, countb = 0;
  f = fopen("c:\\1.txt", "r");
  while(!feof(f))
  {
    
    if (fscanf(f,"%c",&str) > 0)
    {
    
       switch(str)
       {
        case 'a': counta  ;break;
        case 'b': countb  ;break;
       }
    
    }
    
  }      printf("a=%d, b=%d\n", counta, countb);
  return 0;
}
你沒有檢查是否fscanf有無成功, 修改處我用紅字標起來. 而a會多算一次是因為最後一次的fscanf其實是錯的, 但是 str的值沒清掉, 所以會判斷錯誤. 所以你也可以用下方的 方式修改.

#include     int main(int argc, char* argv[])
{
  FILE *f;
  char str;
  int counta = 0, countb = 0;
  f = fopen("c:\\1.txt", "r");
  while(!feof(f))
  {
    
    str = 0;
    
    fscanf(f,"%c",&str);
    switch(str)
    {
      case 'a': counta  ;break;
      case 'b': countb  ;break;
    }
  }      printf("a=%d, b=%d\n", counta, countb);
  return 0;
}
g6101
高階會員


發表:22
回覆:129
積分:110
註冊:2002-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-25 22:57:07 IP:163.29.xxx.xxx 未訂閱
hdilwy您好: (1)按照所提供的程式碼(雖然不夠嚴謹)在我的機器上Run出來,答案是正確(怪哉). ( class="code"> //...略 while(fscanf(f,"%c",&str) != EOF) { switch(str) { case 'a': counta ;break; case 'b': countb ;break; } } ◎天長地久有時盡,追求知識無絕期!
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-26 08:34:38 IP:219.68.xxx.xxx 未訂閱
感謝~~
系統時間:2024-06-18 20:06:46
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!