作者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
1F:推 L4ys:strcpy(all[nc].name, token); 114.45.156.39 07/28 02:04
2F:→ roadeat:感谢楼上的回应,但替换後程式无法执行... 61.224.232.187 07/28 03:15
3F:推 LPH66:你要切逗号 strtok 的第二参数应该要给 "," 114.26.44.185 07/28 04:22
※ 编辑: roadeat 来自: 1.165.114.157 (07/28 11:08)
4F:→ roadeat:拍谢,我判断那边是用","但是我的char * 1.165.114.157 07/28 11:09
5F:→ roadeat:在储存到node时,最後一笔会覆盖全部 1.165.114.157 07/28 11:09
6F:→ roadeat:all[]的name全部都存到最後一笔CC 快晕倒 1.165.114.157 07/28 11:10
7F:推 xblade:1.确认if数值到底多少 2.不需用到strtok吧. 123.192.2.13 07/28 12:34
8F:→ roadeat:是为了切割字串,用","切 1.165.114.157 07/28 14:55