作者roadeat (www)
站內Programming
標題[問題] 有關C語言讀檔案與切割
時間Sun Jul 28 01:06:12 2013
各位前輩您好:
一個讀取csv檔的小程式,將檔案中的字串與數字分開,數字的部分OK,但字串的部分
一直被最後一筆覆蓋,苦找不出原因,煩請解惑。
讀取檔名:test.csv
內容物:
AA,1
BB,2
CC,3
C部分程式:
typedef struct{
char *name;//存字串
float x;//存數字
}node;
node all[10];
main(){
FILE *fp;
char read[15];
char *token;
fp=fopen("test.csv","r");
int count=0,nc=0;//count用來判斷字串或數字(0是字串,1是數字);
//nc用來依序存all[]
while (!feof(fp)){
fscanf(fp,"%s",&read);
token = strtok(read, ",");
while( token != NULL ){
if (count++==0) all[nc].name=token;//count=0 存字串name
//count=1 存數字x
else all[nc].x=atof(token);
token = strtok(NULL, ",");
}
count=0;
nc++;
}
後面列印all[].x都是正確的,但是all[].name的部分都是最後一筆,試了很久
找不到適當的方法改善,不知是否有人可解惑,感謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.232.187
推 L4ys:strcpy(all[nc].name, token); 114.45.156.39 07/28 02:04
→ roadeat:感謝樓上的回應,但替換後程式無法執行... 61.224.232.187 07/28 03:15
推 LPH66:你要切逗號 strtok 的第二參數應該要給 "," 114.26.44.185 07/28 04:22
※ 編輯: roadeat 來自: 1.165.114.157 (07/28 11:08)
→ roadeat:拍謝,我判斷那邊是用","但是我的char * 1.165.114.157 07/28 11:09
→ roadeat:在儲存到node時,最後一筆會覆蓋全部 1.165.114.157 07/28 11:09
→ roadeat:all[]的name全部都存到最後一筆CC 快暈倒 1.165.114.157 07/28 11:10
推 xblade:1.確認if數值到底多少 2.不需用到strtok吧. 123.192.2.13 07/28 12:34
→ roadeat:是為了切割字串,用","切 1.165.114.157 07/28 14:55