Чтение из файла - последняя запись выводится два раза - C (СИ)
Формулировка задачи:
Очень нужна помощь в написании функции на С++
У меня есть написанная функция
Но хотелось бы тоже самое на С++, через
Помогите, кто чем может
Bus *Read_file(char *fname)
{
FILE *inf;//указатель на структуру FILE
Bus x;
Bus *buses=0;//если было что-то введено очищаем
if ((inf=fopen(fname,"r"))==NULL) cout<<"Not file "<<fname<<endl;
fseek(inf,0,0);//задаем текущее положение курсора в начале
while (!feof(inf))
{
fscanf(inf," %s ",&x.fio);//s-строковый тип
fscanf(inf," %d ",&x.mnomer);//d-десятичный вид
fscanf(inf," %s ",&x.nombus);
fscanf(inf," %s ",&x.depo);
buses=add(buses,x);
}
fclose(inf);//закрывает поток ввода/вывода
return buses;
}ifstream inf(fname, ios_base::in);
Решение задачи: «Чтение из файла - последняя запись выводится два раза»
textual
Листинг программы
Bus *Read_file(char *fname)
{
ifstream fin(fname, ios_base::in);
Bus x;
Bus *buses=0;//если было что-то введено очищаем
if (!fin)
{
cout<<"Not file "<<fname;
return 0;
}
while (!fin.eof())
{
fin >> x.fio >> x.mnomer >> x.nombus >> x.depo;
buses=add(buses,x);
}
fin.close();
return buses;
}
Объяснение кода листинга программы
- Входные данные:
- fname - имя файла, из которого необходимо считать данные.
- Создание пустого списка для автобусов:
- buses - указатель на голову списка автобусов.
- Открытие файла:
- fin - объект типа ifstream, который открывает файл для чтения.
- Проверка наличия файла:
- Если файл не может быть открыт, выводится сообщение об ошибке и возвращается 0.
- Чтение данных из файла:
- В цикле while считываются данные из файла до тех пор, пока не достигнут конец файла.
- Считываются данные о каждом автобусе: номер фио, номер маршрута, номер автобуса и номер депо.
- Каждый автобус добавляется в список.
- Закрытие файла:
- После окончания чтения файла он закрывается.
- Возврат списка автобусов:
- Возвращается указатель на голову списка автобусов.
- Если файл пуст, то возвращается 0.
- Если файл не пуст, то возвращается 1.