2010-11-19 2 views
0

Как предотвратить cin от печати на экран консоли в C++? Учитывая эту простую программу:Как предотвратить вывод консоли из cin

#include <iostream> 

using namespace std; 

int main() 
{ 
    cout << "Hello World..." << endl; 

    cin.clear(); 
    cout << "Press ENTER to Continue..." << endl; 
    cin.ignore(); 

    exit(0); 
} 

Таким образом, если пользователь джемы прочь на клавиатуре, ничего не случится, пока ENTER не будет нажата. В настоящее время он отлично работает, но cin сбрасывает нажатия клавиш на консоль. Как предотвратить такое поведение?

Редактировать: Я работаю в Visual Studio 2010 и задаю этот простой вопрос, потому что хочу что-то не специфичное для платформы.

+2

http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.18 –

+0

@Fred Вау действительно? Значит, нет ничего стандартного, что я мог бы использовать? Хммм, что-нибудь «де-факто»? TIL ... – Urda

ответ

5

В Windows необходимо SetConsoleMode.

Там нет стандартной платформы независимого способа, хотя, конечно, вы можете написать свою собственную disable_echo() функцию и использовать #if _WIN32 и #if __LINUX__ для обеспечения конкретной платформы реализаций независимой от платформы интерфейса.

+0

Я думаю, вы могли бы использовать 'getpass()' с пустым приглашением для Linux/UNIX. http://www.manpagez.com/man/3/getpass/ –

+0

Я собираюсь попробовать этот маршрут. Благодаря! – Urda

+0

В Unixen Игнасио предоставил указатель в правильном направлении. [Вот пример кода] (http://cscene.unitycode.org/topics/unix/nossenus-termios.xml.html). –

0

Вам необходимо использовать функции termios(3) для переключения режима ECHO.

+0

Я не знаком с 'termios', эта платформа независима? Сейчас я работаю в Visual Studio 2010 прямо сейчас. – Urda

+3

Не существует независимого от платформы метода. –

+0

Ну, я этого никогда не знал. Hmm – Urda

0

Это невозможно. C++, как спецификация языка, относится не к вашей клавиатуре - это чисто решение платформы, и, к сожалению, различные платформы не дали (даже отдаленно) приблизиться к соглашению о спецификации для чего-то неопределенного терминального.

Лучше не беспокоиться и не полагаться на него.