попробовал это, не мог заставить класс для компиляции сначала, но даже позже, что я должен с этим делать? Иметь IDCIN IDCIN (std :: cin, myString) staction stamentiation, а затем используйте idcin , где бы я ни использовал std :: cin ? А что, что, я просто присваиваю myString и cin в конечном итоге выводит его? В любом случае, не удалось заставить это работать. и если вы делаете cin.rdbuf (file.rdbuf ()); at at start - но не если вы хотите изменить поведение во время выполнения (т.е. вы начали использовать cin нормально, а затем хотите, чтобы он выводил файл после некоторого времени; и все же, не хотите файл, нужна строка). /> Вместо того, чтобы облажаться с CIN, вы можете, чтобы ваша программа приняла общую std :: iStream & < /code>. При нормальном запуске просто передайте это cin . Во время модульного теста пропустите его по потоку ввода/вывода вашего собственного творения. Кроме того, возможно, это относится к отдельным экземплярам iStream (то есть cin для нормального запуска программы, что -то еще для тестового запуска) - здесь я бы хотел написать в cin в той же программе. PrettyPrint-Override ">
Код: Выделить всё
int main() {
using namespace std;
streambuf *backup;
istringstream oss("testdata");
backup = cin.rdbuf();
cin.rdbuf(oss.rdbuf());
string str;
cin >> str;
cout sputn("\r\n", 2);
std::cin.putback('\n');
if (tj.joinable())
{
tj.join();
}
}
void ShellThread::blocking_process_shell(void) {
while( active.load() ) {
printf("> ");
std::getline(std::cin, in_repl_cmd); // detects single press ENTER, and blocks
std::cin.clear();
printf("# %s\n", in_repl_cmd.c_str()); // echo response
}
}
int main(void) {
myshell.start();
std::this_thread::sleep_for(std::chrono::milliseconds(4000));
myshell.stop();
return EXIT_SUCCESS;
}
Итак, что я пытался сделать: std :: cin.clear () , поэтому любые предыдущие ошибки очищаются, а затем попытались записать непосредственно в rdbuf cin с std :: cin.rdbuf ()-> sputn ("\ r \ n", 2); std :: cin.putback ('\ n'); -ничего из этого не помогает с текущим поведением программы:
[code]$ ./test.exe
> hello
# hello
> there
# there
> STOPPING # blocks indefinitely here, have to press ENTER or Ctrl-C *again* if I want it to exit
#
$
Подробнее здесь: https://stackoverflow.com/questions/795 ... ng-getline
Мобильная версия