Вы также можете использовать strtok()
. Если, например, вы используете структуру для каждой записи следующим образом,
typedef struct {
char name[64];
int id, score, section_num;
} entry_t;
следующее будет читать каждую строку файла следующим образом.
char line[128] = {'\0'};
char *field = NULL;
entry_t entry;
while (fgets(line, sizeof(line), fp)) {
field = strtok(line, ";");
if (!field || strlen(field) > sizeof(entry.name)) continue;
strcpy(entry.name, field);
field = strtok(NULL, ";");
if (!field) continue;
entry.id = atoi(field);
field = strtok(NULL, ";%");
if (!field) continue;
entry.score = atoi(field);
field = strtok(NULL, ";");
if (!field) continue;
entry.section_num = atoi(field);
// Do whatever you need with the entry - e.g. print its contents
}
Для краткости я удалил некоторый необходимый шаблонный код. См. http://codepad.org/lg6BJ0hk для полного примера.
Вы можете использовать strtol()
вместо atoi()
, если вам нужно проверить результаты целочисленных преобразований.