Можно ли изменить источник ввод cin

#include <bits/stdc++.h>

using namespace std;



int fn() {

    int n;
    cin >> n

    return 0;
}

Можно ли как-то подать в поток ввода данные для записи в переменную n не с клавиатуры, и ничего не изменять в fn? Может можно как-то записать данные в буфер, чтобы потом с помощью cin их считать? Хочу сделать программу для тестирования произвольных функций.


Ответы (1 шт):

Автор решения: AR Hovsepyan

Если я правильно понял, вы хотите изменить буфер std::cin. Да, но только не забывать потом вернуть старый.

std::ifstream in("some_file");
//установим новый буфер, очистим буфер и вернем старый
std::streambuf* buf = cin.rdbuf(in.rdbuf());
//теперь cin читает из буфера файлового потока
fn();
//установим старый
cin.rdbuf(buf);
→ Ссылка