2013-12-12 40 views
-3

我想在字符串行上使用strtok()並將其元素放入結構元素 但我無法寫入正確的代碼.. 。請任何幫助strtok()從文件中的字符串行後的結構存儲日期

這是主要的

store book; 
char line[80]; 
printf("Insert book as:'title','author','publisher','ISBN','date of publication',and'category'\n"); 
gets(line); 
char *p; 
char s[2]=","; 
p=strtok(line,s); 

的結構

typedef struct bookStore{ 
    char title[80]; 
    char author[80]; 
    char ISBN[20]; 
    char date[20]; 
    int numOfCopy; 
    int currNumOfcopy; 
    char category[20]; 
}store; 
+1

你沒有描述你實際得到的預期行爲和行爲。另外,您需要多次調用strtok。 –

+0

我已經寫了我的代碼,但它沒有工作......所以我主要的問題是如何將數據放入結構strtok後我的行 – Sunny

回答

1

結構

您的printf如下:

printf("Insert book as:'title','author','publisher','ISBN','date of publication',and'category'\n"); 

,但你的結構隻字未提出版商。

此外它還包含兩個字段,它們是80個字符長和3個字段,它們的長度爲20個字符,但您只爲要分析的字符串分配80個字符的緩衝區。

得到

這是一個在C中存在的函數。它永遠不會被使用,因爲它會讓你的程序容易受到stackoverflow(安全問題,而不是本站;))。

以下是填寫行變量的正確方法。

fgets(line,80,stdin); 

的strtok

你與輸入字符串調用它來獲得的第一個標記,像你這樣,然後你需要用NULL而不是輸入字符串,以獲得下一個標記來調用它。你會知道,當字符串返回NULL時,沒有更多的標記。

該函數使用靜態變量保持內部狀態,這是一種不好的做法。大多數情況下應避免這種做法。

填充你的結構

可以使用字符串的strcpy做到這一點,你需要#include<string.h>

p=strtok(line,s); 
    length = strlen(p); /* length should be declared int where you declare your variables */ 
    if (length > 79) { 
    printf("You entered title which is %d characters, but 79 were expected", length); 
    exit(1); 
    } 
    strcpy(book.title, p); /* It's safe, because we already checked the length of the string */ 
} 

如果您需要填充一個數字,你將不得不sscanf的

int number; 
    sscanf(p,"%d", book.numOfCopy); 
使用
+0

非常感謝..你給我一個很大的幫助:)我有一個項目提供;) – Sunny

相關問題