我有一个file.txt,其中包含:
Marco Beno
Polo
15
Mario
Pollo Pollo
20
和结构定义为:
struct person{
char name[15];
char surname[15];
int age;
}
现在我要逐行将此文件读入此[[struct,因此将marco beno分配给person.name, Polo到person.surname,依此类推...我一直在寻找解决方案,但找不到相关示例。问题是space跳过了对下一个变量的读取,因此Marco是名称,Beno是姓。但是它看起来应该像这样:person.name == Marco Beno
fscanf
一次读取三行(=一个数据记录):while (fscanf(filename, "%[^\n]\n%[^\n]\n%i\n", person1.name, person1.surname, &person1.age) == 3)
{
printf("Retrieved data record: name = '%s', surname = '%s', age = %i\n",
person1.name, person1.surname, person1.age);
}
格式说明符%[^\n]\n
将读取除换行符以外的所有字符(即包括空格的整行),然后读取换行符本身。每个数据记录(名称和姓氏)都会发生两次,最后读取一个整数和第三个换行符。请注意,这只是一个简单的示例来说明这个想法,并且
person1
结构每次都会被覆盖。如果需要将整个文件存储在内存中,则当然必须分别存储每个数据记录(例如,存储在person
数组中)。