Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа пропускает внутренний цикл 
V
    Опции темы
Ober
Дата 26.8.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Добрый вечер, объясните пожалуйста,  почему при выполнении внешнего цикла while несколько раз, внутренний  цикл while выполняется не больше одного раза, а в остальных случаях просто пропускается. Вроде и указатель ставлю на начало файла, и поток очищаю а он все равно не выполняется. Предположим, что transaction.txt, base.txt, new.txt уже созданы и в первых двух файлах больше чем по 2 записи.

Код

void sop()
{
  int abase; //номер акаунта в конечном файле
  char b[ 10 ]; //имя в конечном файле
  double cbase; //баланс в конечном файле
     
  int atrans; //номер аккаунта в первичном файле
  double ctrans; //значение транзакции в первичном файле
  double sum; //сумма баланса после транзакции 
     
  fstream transactionFileIn( "transaction.txt", ios::in | ios::out );
  fstream baseFileIn( "base.txt", ios::in | ios::out );
  fstream newFileOut ( "new.txt", ios::out | ios::out );

  
  transactionFileIn >> atrans >> ctrans; //считываем данные из первичного файла 
  while( !transactionFileIn.eof() )//пока не конец файла
  {  
    cout << "trans cicle\n";    

      cin.clear();   
      baseFileIn.seekg( 0 );  

      baseFileIn >> abase >> b >> cbase;
    while( !baseFileIn.eof() )//пока не конец базового файла
    {          
      cout << "Base Cicle\n";         
      if( atrans != abase  )
      { 
        cout << "Not evalue\n";  
        newFileOut << abase << " " << b << " " << cbase << endl;
      }//конец if    

      //если номер счета в первичном файле равен номеру счета в конечном       
      else if( atrans == abase )
       {    
         cout << "Evalue\n";   
         sum = cbase + ctrans;   
         newFileOut << abase << " " << b << " " << sum << endl;
       }//конец else  

       baseFileIn >> abase >> b >> cbase;   
    }//конец внутреннего while

     cout << "End out\n";   
     transactionFileIn >> atrans >> ctrans; //считываем данные из первичного файла   
}//конец внешнего while    

         
За ранее спасибо.

PM MAIL   Вверх
Estranged
Дата 26.8.2011, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Сразу после baseFileIn.seekg( 0 ); написать streamoff offset = baseFileIn.tellg (); чисто ради шутки.
PM MAIL   Вверх
Ober
Дата 27.8.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(Estranged @ 26.8.2011,  23:48)
Сразу после baseFileIn.seekg( 0 ); написать streamoff offset = baseFileIn.tellg (); чисто ради шутки.

Честно говоря шутки не понял ))
PM MAIL   Вверх
Estranged
Дата 27.8.2011, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 30.8.2010

Репутация: нет
Всего: 3



Так узнаем текущую позицию чтения в файле base.txt.
baseFileIn.seekg( 0 );  
streamoff offset = baseFileIn.tellg ();
baseFileIn >> abase >> b >> cbase;

Кроме того, до цикла, который не выполняется, читаются данные. Вдруг уже конец файла?

baseFileIn.seekg( 0 );  
streamoff offset = baseFileIn.tellg (); <- здесь ожидаем 0
baseFileIn >> abase >> b >> cbase;
streamoff offset2 = baseFileIn.tellg (); <- здесь что? Конца файла не достигли случайно?
while( !baseFileIn.eof() )//пока не конец базового файла
...
PM MAIL   Вверх
vinick
Дата 27.8.2011, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 9.6.2005

Репутация: нет
Всего: 22



В строке 21 вы очищаете не тот поток. это опечатка на форуме или в коде так же? Если второе, то замените на baseFileIn.clear()
PM MAIL ICQ Jabber   Вверх
Ober
Дата 27.8.2011, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 11.3.2011

Репутация: нет
Всего: нет



Цитата(vinick @ 27.8.2011,  18:01)
В строке 21 вы очищаете не тот поток. это опечатка на форуме или в коде так же? Если второе, то замените на baseFileIn.clear()

Большое спасибо вам за помощь, это была моя ошибка, я очищал не тот поток и поэтому в BaseFileIn оставался признак конца файла.

Это сообщение отредактировал(а) Ober - 27.8.2011, 19:25
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0658 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.