在我的程序的功能,我想從文件中加載數據到這個結構數組:c - 從中文件加載用於fgets和sscanf
/* database struct */
typedef struct node {
char name[MAX];
char address[MAX];
long int number;
}record_type;
record_type record[100];
的功能如下:
/* load database from disk */
void load_database() {
char line[128];
/* Set up database */
database = fopen("database.txt", "r+w+a+");
if(database == NULL) {
printf("\n\tWARNING: No database found.");
exit(1);
}
/* Get database file from disk */
while(fgets(line, sizeof(line), database) != NULL) {
sscanf(line, "%s %s %lu", record[rec_num].name,
record[rec_num].address, &record[rec_num].number);
/* keeps track of array size */
rec_num++;
}
}
我遇到的問題是與sscanf不一致。如果我包含名字和姓氏,我不能在它們之間放置空格,或者它將姓氏放在姓名[]中,並將姓氏放在地址[]中。
這裏是我從試圖輸入數據的樣本:
1. Name: james manes Address: 220 test addr Number: 5558889999
我需要獲得「詹姆斯鬃毛」入名[]字段,220測試地址到地址[]字段和5558889999到結構的數字字段中。這可能嗎?
是否有更有效的方法來管理這種類型的輸入?
請提供您嘗試解析的數據的示例。 – jomik
如果您需要處理輸入中的可選空格,並且可能還在地址中,那麼除非您的輸入中的字段之間有可靠的分隔符,否則這很難處理。無論哪種方式,使用正則表達式解析器可能會更好(嘗試'man 3 regex')。 –
@JimStewart我從來沒有看過正則表達式。我會研究一下。 –