Я бы использовал fgets
, чтобы прочитать строку из файла, strtok
, чтобы разбить ее на точки с запятой, strcpy
, чтобы скопировать строки, strtod
, чтобы преобразовать в double, и strtol
, чтобы преобразовать в long и затем приведите к целому числу).
Или прочитайте строку и используйте конечный автомат для обхода каждого символа и выполнения правильной операции. Например, вы будете копировать каждый символ в firstText, пока не достигнете точки с запятой, затем используйте strtod
, чтобы съесть двойное число, пропустить точку с запятой, скопировать байты во secondText и т. Д.
Или используйте строку формата scanf, чтобы разбить строку на все поля
fscanf(myFile, " %[^;];%lf;%[^;];%d;%[^;];%lf",
myRecords[i].firstText,
&myRecords[i].myDouble1,
myRecords[i].secondText,
&myRecords[i].myInt1,
myRecords[i].thirdText,
&myRecords[i].myDouble2);
И, как уже упоминалось, проверьте возвращаемое значение fscanf
.
Я предпочитаю читать строки за раз, чтобы избежать того, что одна плохая строка испортит все последующие преобразования.