Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Признак конца файла  (Прочитано 10144 раз)
0 Пользователей и 1 Гость смотрят эту тему.
aeris
Гость
« : 16-12-2008 00:12 » new

Здравствуйте! Такая проблема - Турбо С++ делаю приложение, имитирующее меню ресторана. Данные читаются из файла.
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int i,j;
    n=StrToInt(Edit1->Text);//Считываем количество клиентов
    Randomize();
    f=0; j=1; i=1;
    ifstream input_file("Menu1.txt");
    char line[64];

    while (i<=n)
    {
        if (input_file.eof()) {
            input_file.close();
            ifstream input_file("Menu1.txt");
        };
       
        input_file.getline(line, sizeof(line));
        StringGrid1->Cells[1][j]=line;//Название
        input_file.getline(line, sizeof(line));
        StringGrid1->Cells[2][j]=line;//Cостав

        //Обслуживание клиента в ресторане
        vibor=Random(1795)+5;//Выбор клиентом блюд 5 сек до 1800 сек
        zayavka=Random(160)+20;//Официант относит заявку  от 20 сек до 2 минуты

        input_file.getline(line, sizeof(line));
        gotovka=StrToInt(line);//Готовка из БД (+5 мин)
        polychenie=Random(300)+15;//Получить от 15 сек до 10 мин
        dostavka=Random(40)+10;//Отнести от 10 сек до 50 сек
        t=vibor+zayavka+gotovka+polychenie+dostavka;
        f=f+t;
        StringGrid1->Cells[3][j]=IntToStr(gotovka)+" мин";
        StringGrid1->Cells[4][j]=FloatToStr(t/60)+" мин";
        StringGrid1->Cells[0][j]=IntToStr(i);
        j++;
       
        if ((Random(3)%2)==0) {
            i++;
        };
    };
}
содержимое файла:
Код:
Ассорти сырное
гауда, чечел, дор блю, виноград, грец.орехи
15
Милано Кап
мороженное шоколадное, фундук, сироп шоколадный, сливки взбитые
13
Ассорти овощное
помидоры св., огурцы св., перец болгарский, зелень
6
Персиковая Мельба
мороженное ванильное, персики консер., взбитые сливки
10
Рулетики из баклажанов
баклажаны, грец.орехи, майонез, чеснок, зелень
8
Мне нужно, чтобы при дочтижении конца строки считывание опять возвращалось в начало файла..Но почему-то у меня считывается последнее значение (8), при следующем считывании значение становится равным '' (не ' '), спокойно проходит проверку,что это не конец файла и дальше прога вылетает, ибо " ''' is not a valid integer value"..Я так поняла, что во этот символ последний ('') и есть признак конца файла, так почему он проверку тогда проходит? Может,я неправильно её вызываю, или в чем тогда дело?
« Последнее редактирование: 16-12-2008 06:33 от Вад » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-12-2008 06:55 » 

Немного подформатировал код из эстетических соображений.
А откуда в коде загадочные переменные f и n? Глобальные, что ли? А зачем? Улыбаюсь
Над этим куском предлагаю помедитировать отдельно:
Код:
if (input_file.eof()) {
    input_file.close();
    ifstream input_file("Menu1.txt");
};
Во-первых, он делает совсем не то, что подразумевалось. А во-вторых, даже если и исправить - то работать будет некорректно. Чтобы прочитать файл заново, нужно создавать новый поток, но делать это нужно иначе.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines