Чтобы использовать строки?
Если бы идентификаторы были std:string
, вы могли бы сделать:
Std->stdID = ID;
И вы могли бы использовать std::getline()
:
getline(SFile, ID, '\t');
Вам не придется беспокоиться о максимальной длине, но вы все равно можете проверить длину строки и сократить ее при необходимости.
Или не использовать строки?
Но если вы предпочитаете (или должны) использовать char[]
вместо этого, тогда вам нужно использовать strncpy()
длявыполняя задания:
strncpy( Std->stdID, ID, 10 ); // Std->stdID = *ID;
Честно говоря, в 21-м веке, я бы пошел на std :: string, а не придерживался старого char[]
, датируемого 70-ми ...
Файловый цикл
Это не связано, но вы никогда не должны зацикливаться на eof
:
while (SFile.getline(ID, 10, '\t')
&& SFile.getline(Name, 30, '\t') && SFile.getline(Sem, 5, '\n') {
...
}
Почему?Посмотрите здесь для получения дополнительных объяснений
И, кстати, ваш последний getline()
должен обязательно искать '\n'
в качестве разделителя, согласно вашей функции записи.