全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1032
推到 Plurk!
推到 Facebook!

不好意思,再次問一個讀檔的小問題

尚未結案
starhua628
一般會員


發表:16
回覆:9
積分:5
註冊:2005-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-05 17:34:39 IP:211.21.xxx.xxx 未訂閱
不好意思各位,小弟在讀檔的問題上面有出現一些小問題, 在TXT檔裡面的每一列資料為 2 <空白> aaa <空白> 456 <空白> kkk 當我只有存第一欄資料(在此為2這個數字)時皆沒問題,但當我想加存第三欄資料時(在此為456這個數字),卻發生執行程式突然跳出來,還請各位幫我看看有那邊出了問題,我的compiler可以過^^..謝謝大家了 (PS,我放了一張執行程式跳出來的結果畫面,希望可以有些幫助)    
//程式開頭宣告
  #include 
  #pragma hdrstop
  #include 
  #include 
  #include "Unit1.h"
  int *d_day1,*money1;
  char *i_num1[10],*people1[7];    //程式開始
  FILE *in,*out;
  int i=0,j=0,k,m,n,size=0;
  char line[maxline];
  char d_day[4],i_num[11],money[7],people[8];
  char *cp;      out=fopen("D:\\out_1.txt","w");
  if(OpenDialog1->Execute())
  {
   if(( in=fopen(OpenDialog1->FileName.c_str(), "r"))==NULL)
   {
     ShowMessage( "OPen File Error");
   }
   while (fgets(line,maxline,in)!=NULL&&line[0]!='\n')
   {
    size++;   //計算TXT檔內容有多少筆資料
   }
  }
   in=fopen(OpenDialog1->FileName.c_str(), "r");
   d_day1 = new int[size];    //動態矩陣宣告
   money1 = new int[size];       while (fgets(line,maxline,in)!=NULL&&line[0]!='\n')
   {
    cp = line;
    i=0;
    while ((*cp != ' ')&(*cp != '\0'))   //第一欄資料
    {
     d_day[i]=*cp;
     cp++;
     i++;
    }        while (*cp == ' ')
     cp++;        k=0;
    while ((*cp != ' ')&(*cp != '\0'))   //第二欄資料
    {
     i_num[k]=*cp;
     cp++;
     k++;
    }        while (*cp == ' ')
     cp++;         m=0;
    while ((*cp != ' ')&(*cp != '\0'))   //第三欄資料
    {
     money[m]=*cp;
     cp++;
     m++;
    }        while (*cp == ' ')
     cp++;        n=0;
    while ((*cp != ' ')&(*cp != '\0'))   //第四欄資料
    {
     people[n]=*cp;
     cp++;
     n++;
    }            if(i==1)
    d_day1[j]=StrToInt(d_day[0]);
    else if(i==2)
    d_day1[j]=10*StrToInt(d_day[0])+StrToInt(d_day[1]);
    else if(i==3)
    d_day1[j]=100*StrToInt(d_day[0])+10*StrToInt(d_day[1])+StrToInt(d_day[2]);        if(m==1)
    money1[j]=StrToInt(money[0]);
    else if(m==2)
    money1[j]=10*StrToInt(money[0])+StrToInt(money[1]);
    else if(m==3)
    money1[j]=100*StrToInt(money[0])+10*StrToInt(money[1])+StrToInt(money[2]);        fprintf(out, "%d\t""%d\t""\n", d_day1[j],money1[j]);
    j++;
   }
   fclose(in);
   fclose(out);
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-05 18:17:41 IP:59.104.xxx.xxx 未訂閱
單步執行看看吧。 一步一步去追一步一步去看變數的變化。 就可以知道為什麼了。^_^
starhua628
一般會員


發表:16
回覆:9
積分:5
註冊:2005-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-05 19:59:41 IP:220.135.xxx.xxx 未訂閱
你好,我測試的結果會跳到以下的畫面,可是我還是看不懂他顯示是哪邊有問題,請問有人可以幫我看一下這種狀況應該會是哪邊出了差錯呢...真的多謝了
starhua628
一般會員


發表:16
回覆:9
積分:5
註冊:2005-03-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-05 21:26:20 IP:220.135.xxx.xxx 未訂閱
各位這個問題我已經解決了,除了判斷是否為' '還要再加上'\t'作判斷就可以了,不過結果還是有一個大問題,就是存的資料大概也是只有一半左右的原始資料,還希望各位幫忙應該怎麼解決,感覺用fgets()跟fscanf()的結果是一樣的,不過fgets()用在想分別存各欄位的資料會比較麻煩
系統時間:2024-05-03 14:26:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!