0
我有必須添加到鏈接列表中的數據結構。該數據結構將來自一個文件,這樣,例如輸入:從文件中分割字符串然後存儲到結構中
I0001|Item 1|Item 1 Desc|3.50|50
I0002|Item 2|Item 2 Desc|3.00|20
I0003|Item 3|Item 3 Desc|4.00|10
結構:
typedef struct stock
{
char id[ID_LEN + NULL_SPACE];
char name[NAME_LEN + NULL_SPACE];
char desc[DESC_LEN + NULL_SPACE];
Price price;
unsigned onHand;
} Stock;
到目前爲止我的代碼是這樣的:
Boolean loadStock(VmSystem * system, const char * fileName)
{
Stock data;
char id[ID_LEN + NULL_SPACE], name[NAME_LEN + NULL_SPACE], desc[DESC_LEN + NULL_SPACE];
FILE *fp;
char str[200], *token;
if((fp = fopen(fileName, "r")) != NULL)
{
printf("File loaded\n");
}
else
{
perror("Cannot open file");
return FALSE;
}
if (fgets(str,sizeof(str),fp) == NULL)
{
perror("failed to read from file");
return FALSE;
}
while(fgets(str,sizeof(str),fp) != NULL)
{
token = strtok(str, "|");
while(token != NULL)
{
/** DO SOMETHING HERE **/
printf("%s\n", token);
token = strtok(NULL,"|");
}
}
fclose(fp);
return TRUE;
}
我寫了這但它不起作用:
if(i%5 == 0)
{
strcpy(id, token);
}
else if(i%5 == 1)
{
strcpy(name, token);
}
else if(i%5 == 2)
{
strcpy(desc, token);
}
printf("%s\n", id);
token = strtok(NULL,"|");
i++;
memset(id, '\0', sizeof(id));
memset(name, '\0', sizeof(name));
memset(desc, '\0', sizeof(desc));
我有一些問題採取的令牌,並用它來存儲值到結構
我建議你不要在循環中做「標記化」,而應該用簡單的連續方式,在彼此之後對'strtok'進行5次調用。然後將該令牌複製到正確的結構成員中。 –