Поскольку структура может содержать до 220 символов и целое число, используйте char line[300];
Только с четырьмя полями, набор сканирования в sscanf
будет работать с хорошо отформатированным вводом.Scanset %[^,]
будет сканировать символы, которые не являются запятыми.%99[^,],
будет сканировать до 99 символов, которые не являются запятыми, а затем сканирует запятую." %99[^,], %99[^,], %19[^,], %d"
будет сканировать два поля длиной до 99 символов, которые не являются запятыми, одно поле длиной до 19 символов, которые не являются запятыми, а затем целое число.sscanf
вернет количество успешно отсканированных полей.Если отсканировано четыре поля, увеличьте k
.
#include <stdio.h>
//struct person with 4 fields
struct person {
char name[100];
char address[100];
char IDnumber[20];
int age;
};
int main ( void) {
FILE *file = fopen ( "personout.txt", "r");
// declares an struct array to store data
struct person student[10];
int k = 0;
if ( file != NULL) {
char line[300];
while ( k < 10 && fgets ( line, sizeof line, file ) != NULL ) {
if ( 4 == sscanf ( line, " %99[^,], %99[^,], %19[^,], %d"
, student[k].name
, student[k].address
, student[k].IDnumber
, &student[k].age)) {
printf ( "%s\n", student[k].name);
printf ( "%s\n", student[k].address);
printf ( "%s\n", student[k].IDnumber);
printf ( "%d\n", student[k].age);
k++;
}
}
fclose ( file );
}
}