2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 C++ потоки, читать из файла, а не с консоли
Сообщение12.02.2018, 11:37 
Аватара пользователя
Есть класс
Код:
class Point{
    friend ostream& operator<<(ostream&, Point p);
    friend istream& operator>>(istream&, Point &p);
   .......
};

с переопределенными (перегруженными) оператрами ввода и вывода. Все работает:
Код:
Point p;
cin >> p;

Но теперь мне нужно читать значения не из консоли, а из файла. Как это сделать, не меняя класс? Чтение строки line из файла с дальнейшим
Код:
line >> p;
не работает:
Код:
    char filename[100];
    cin >> filename;
    ifstream myfile(filename);
    string line;
    istream *is;
    if (myfile.is_open()) getline (myfile,line);
    line >> p;

Я понимаю, что оператор перегружен для потока, а я пытаюсь скромить ему строку, но как ему строку дать в виде потока?

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение12.02.2018, 11:44 
Аватара пользователя
Зачем, если у Вас уже есть поток myfile?

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение12.02.2018, 12:50 
Аватара пользователя
Xaositect в сообщении #1291971 писал(а):
Зачем, если у Вас уже есть поток myfile?

Мне нужно из каждой строки читать два числа. Это можно сделать, не разбивая файл на строки? Одним потоком?

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение12.02.2018, 13:10 
Если в каждой строке много чисел, а считать надо только первые два, то не разбивая читать сложно. Вашу задачу решает istringstream.

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение12.02.2018, 13:41 
Kornelij в сообщении #1291980 писал(а):
Xaositect в сообщении #1291971 писал(а):
Зачем, если у Вас уже есть поток myfile?

Мне нужно из каждой строки читать два числа. Это можно сделать, не разбивая файл на строки? Одним потоком?

Да, можно. Просто читайте точки из потока myfile. Разбиение на строки не играет роли.

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение12.02.2018, 16:14 
Аватара пользователя
stringstream

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение15.02.2018, 19:24 
Аватара пользователя
Скажите, а если у меня
Код:
class Point{   
   .......
    friend istream& operator>>(istream&, Point &p);
   .......
};

то можно ли в реализации этого оператора узнать, какой именно у меня входной istream поток - cin или ifstream?

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение15.02.2018, 19:46 
Пожалуйста, не делайте так. Это очень плохая идея.
Зачем вам понадобилось знать откуда вы читаете?

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение15.02.2018, 19:51 
Аватара пользователя
Такая постановка задачи - переопределить оератор ввода ">>" и для случая чтения с клавиатуры выводить пользователю на экран запрос на ввод каждой координаты точки, а для случая чтения из файла эти запросы не выводить, а просто читать координаты точки из потока.

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение15.02.2018, 20:00 
Никогда так не делайте. Этот код нарушает много правильных соглашений, но работает так как вам надо:
Код:
if (&input_stream == &std::cin) {
    std::cout << "prompt:";
}

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение15.02.2018, 20:32 
Аватара пользователя
спасибо

 
 
 
 Re: C++ потоки, читать из файла, а не с консоли
Сообщение16.02.2018, 06:17 
Kornelij в сообщении #1292707 писал(а):
Такая постановка задачи - переопределить оератор ввода ">>" и для случая чтения с клавиатуры выводить пользователю на экран запрос на ввод каждой координаты точки, а для случая чтения из файла эти запросы не выводить, а просто читать координаты точки из потока.
Просто принятие решения надо делать в другом месте: ведь, в самом деле, ваш же код наверняка и выбирает, какой поток брать, вот там и поставьте выбор того или иного сценария, а объектам класса, если так надо, передавайте, скажем, флаг. Или пусть они к этому состоянию как-то иначе имеют доступ, тут уже вам выбирать.

 
 
 [ Сообщений: 12 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group