Потоковое Чтение В Строку

Тема в разделе "Общие вопросы по С и С++", создана пользователем eugira, 16 июн 2014.

  1. eugira

    eugira Member

    Регистрация:
    2 фев 2007
    Сообщения:
    14
    Симпатии:
    0
    Есть потоковое чтение из текстового файла в строковую переменную типа char[n].
    Вопрос читаться будет ровно n символов или до 1-го пробела?
    Более конкретно есть текстовый файл с 2 записями
    RS728 INTEL Celeron G530 4096 500 9990
    RS729 INTEL Celeron G540 4096 1000 11120
    структура
    Код (Text):
    struct TComp {
    char Marka[15];
    char Pr[20];
    int Vop;//объем ОП
    int Vgd;//объем ЖД
    int Price; //цена
    TComp *next;
    };
    и код, написанный правда в QT
    Код (Text):
    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 строки файла w->Pr="INTEL Celeron G530" фактически читается
    w->Pr="INTEL" Дальше идет смещение. Это всегда так при потоковом чтении? Как исправить?
     
  2. virtpro

    virtpro Member

    Регистрация:
    18 сен 2009
    Сообщения:
    9
    Симпатии:
    0
    У тебя структура известного размера, можно её записать таким образом

    Код (C++):
       
    fstream f("file.txt", ios::binary | ios::in | ios::out );

    //Для записи
    f.seekp( 0, ios::end );
    f.write( (unsigned char * ) & TComp , sizeof TComp );

    // для чтения
    f.seekp(0,ios::beg);
    f.read( (unsigned char *) & TComp, sizeof TComp );
     
Загрузка...

Поделиться этой страницей