在c ++中只读取1个字符

时间:2012-04-02 18:17:11

标签: c++

  

可能重复:
  How is std::iostream buffered?

这可能听起来很荒谬,但是如何在c ++中读取cin中的一个字符(直到输入被按下,只有一个字符)? 我已经尝试过运算符>>,get(),getchar(),但所有这些都读取了整行。

3 个答案:

答案 0 :(得分:3)

cin是缓冲输入。你想要“无缓冲”的输入。除非您直接使用文件,否则它在不同平台上可能会有所不同。

这样的事情可能有所帮助:

http://www.cplusplus.com/forum/beginner/3329/

[EDIT],请记住,使用“buffered”v。“un-buffered”是一个设计决定,两者都是合法的。 cin上“缓冲输入”的“默认”非常有意义,因为用户将“退格”以纠正输入行,并且您不希望“混乱”为您的程序提供信息。 (而且,一般来说,像文件一样“缓冲输入”可以更有效率。)

答案 1 :(得分:3)

_getche() function做你想要的。

答案 2 :(得分:2)

虽然这是特定于操作系统的,但在类UNIX操作系统中,您可以使用termios接口通过将其置于非规范模式来禁用终端上的输入缓冲:

termios t;
tcgetattr(STDIN_FILENO, &t);
t.c_lflag &= ~ICANON;
tcsetattr(STDIN_FILENO, TCSANOW, &t);

有关详细信息,请参阅termios(3)