2013-06-02 3 views
0

Как бы подойти к ситуации, когда вы хотите вывести символ на символ в программе на C++, чтобы имитировать действие ввода?Характер символьного вывода для имитации эффекта ввода

+0

Конкретную часть его вы боретесь с? Я могу придумать много способов добиться этого, но это действительно зависит от того, с какой частью у вас возникают проблемы, чтобы объяснить, что вам нужно. –

+0

Я хочу написать функцию, которая может дать строку, и выводит ее символ по символу – Rijnhardt

+0

@Rijnhardt И что вы уже пробовали решить эту проблему? –

ответ

0

Вы все еще можете использовать функцию usleep(ms) из lib C между каждым символом, который хотите записать. Оно работает.

+0

Предполагая, что это не в системе Windows ...;) –

3

Попробуйте это: (C++ 11)

#include <iostream> 
#include <thread> 
#include <chrono> 

int main() { 
    std::string s = "Hello!"; 

    for (const auto c : s) { 
     std::cout << c << std::flush; 
     std::this_thread::sleep_for(std::chrono::milliseconds(500)); 
    } 
    std::cout << std::endl; 
} 
+1

Это не работает для меня (хотя я подозреваю, что это должно). Добавление флеша после каждого 'std :: cout << c', или установка' unitbuf' заставляет его работать. (И, конечно, если у вас нет C++ 11, вам понадобится другой таймер.) –

+0

@JamesKanze Хм, добавлен модификатор, который очищает поток, хотя я не вижу, что это необходимо. Это может быть хорошей практикой для вывода новой строки после завершения строки. :) – Snps

+0

@JamesKanze C99, 7.19.3/7; он только утверждает, что стандартные потоки * полностью буферизированы * **, если ** они относятся к интерактивным устройствам. – dyp

Смежные вопросы