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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ifstream и строковое считывание, Косяк со считыванием файла построчно 
V
    Опции темы
Дшпыук
  Дата 7.4.2010, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не сплю
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 4.3.2010
Где: Омск

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



Код

        struct p_rec{
          string name;
          string surname;
          string last_name;
          int year;    
          int month;
          int day;
          string note;
        };
        ................
        ifstream file;
        file.open( "base.dat" );
        file.seekg(0,std::ios::beg);
        if(file.is_open()){
        do{ //Считываем базу
            file.getline(str,sizeof(str));
            sscanf(str, "%s %s %s %d %d %d %s",
                       recs[nums].name.c_str(),
                       recs[nums].last_name.c_str(),
                       recs[nums].surname.c_str(),
                       &recs[nums].day,
                       &recs[nums].month,
                       &recs[nums].year,
                       recs[nums].note.c_str());
            if (file.fail()) break; //И это, чтобы два раза последнюю строчку не считывать
            ++nums;
        } while (!file.eof());
        }
        file.clear();
        file.close();
        ...............

вот... На первый взгляд всё просто, читаем строку и разбираем на переменные. Но не тут то было. На выходи все переменные string равняются последнему значению в файле... Тоесть если файл будет выглядеть как:

123 123 123 123 123 123 123
333 333 333 333 333 333 333
123 123 123 13 2222 22222 22

То все string будут равны 22. В чём проблема может быть?) 
Заранее блгодарю)

Это сообщение отредактировал(а) Дшпыук - 8.4.2010, 10:51
PM MAIL ICQ   Вверх
toxx
Дата 7.4.2010, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На сколько мне известно getline если 1й раз читает у неё уже в буфере чтото есть, и в буфер попадает пустая строка, чтобы такого не было надо писать перед циклом 

Код

 do{}while 


строку 
Код

 file.getline(str,sizeof(str));


возможно из-за этого
PM MAIL   Вверх
Дшпыук
Дата 7.4.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не сплю
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 4.3.2010
Где: Омск

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



После того как вставил этот участок перестала читаться первая запись, а со строками ничто так и не изменилось...
Пока оставил как было...
PM MAIL ICQ   Вверх
xvr
Дата 8.4.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Дшпыук @  7.4.2010,  21:47 Найти цитируемый пост)
В чём проблема может быть?
В авторе  smile Индусы просто нервно курят в сторонке  smile 

В string.c_str() читать НЕЛЬЗЯ! Это метод, возвращающий указатель на внутренности string с целью его (string) читать, а не модифицировать.
Почему бы не читать из потока так, как задумывалось авторами С++, а не через заднепроходное отверстие?

Код

p_rec& R=recs[nums];
file >> R.name >> R.last_name >> R.surname >> R.day >> R.month >> R.year >> R.note;


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


Не сплю
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 4.3.2010
Где: Омск

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



Цитата(xvr @  8.4.2010,  09:39 Найти цитируемый пост)
В авторе   Индусы просто нервно курят в сторонке   

 smile гхм, ну признаю, опыта маловато) Но я учусь) Спасибо за подсказку, так действительно работает)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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