Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ потоковое чтение в структуру из текстового файла

3.3K
16 июня 2014 года
eugrita
24 / / 26.02.2006
Правда я пишу сейчас в QT его мало кто знает, но общие принципы потокового чтения одинаковы видимо.
Вот код
Код:
struct TComp {
  char Marka[15];
  char  Pr[20];
  int Vop;//объем ОП
  int Vgd;//объем ЖД
  int Price; //цена
  TComp *next;
            };
....
bool ListComp::ReadFile(char * fln)
{//чтение из файла
  QFile f(fln);  TComp *w=new TComp;
  if(!f.exists()) return false;
  f.open(QIODevice::ReadOnly);
   QTextStream in(&f);
  while (!in.atEnd())
  {
     in>>w->Marka; in>>w->Pr; in>> w->Vop; in>> w->Vgd; in>> w->Price;
     std::cout << w->Marka <<","<< w->Pr<<","<< w->Vop << 'n';
     Add(w);
  }
  f.close();
  return true;
}
Верно ли что потоковое чтении в строковую переменную обрывается после 1-го пробела?
Конкретно ,На файле c 2 записями
RS728 INTEL Celeron G530 4096 500 9990
RS729 INTEL Celeron G540 4096 1000 11120
при чтении в Pr получено не w.pr=" INTEL Celeron G530" а w.pr=" INTEL"
соответственно дальше пошло смещение и считалось не 2 записи как в файле а 4
446
16 июня 2014 года
Meander
487 / / 04.09.2011
Попробуй программно инициализировать данными две структуры, так, как ты хотел чтобы они хранились и сохрани их в файл. Затем посмотри какую структуру будут иметь сохраненные данные. В таком формате и надо будет заполнять текстовый файл. Но структуры лучше сохранять в бинарном, а не текстовом виде.
260
16 июня 2014 года
Ramon
1.1K / / 16.08.2003
Верно.
247
17 июня 2014 года
wanja
1.2K / / 03.02.2003
Да, потоковое чтение строки обрывается после первого символа. Используй .getline() .
326
18 июня 2014 года
sadovoya
757 / / 19.11.2005
Открываем Qt Assistant и сходу находим:
Цитата:
There are three general ways to use QTextStream when reading text files:
...
Word by word. QTextStream supports streaming into QStrings, QByteArrays and char* buffers. Words are delimited by space, and leading white space is automatically skipped.
...


и далее:

Цитата:
QTextStream & QTextStream::operator>>(char * c)
This is an overloaded function.

Stores the word in c, terminated by a '\0' character. If no word is available, only the '\0' character is stored.

Warning: Although convenient, this operator is dangerous and must be used with care. QTextStream assumes that c points to a buffer with enough space to hold the word. If the buffer is too small, your application may crash.

If possible, use the QByteArray operator instead.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог