Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中仅读取1个字符+;_C++ - Fatal编程技术网

C++ c+中仅读取1个字符+;

C++ c+中仅读取1个字符+;,c++,C++,可能重复: 这听起来可能很荒谬,但是我如何才能从C++中读取CIN中的一个字符(直到输入被按下,只有一个字符)? 我尝试了操作符>>、get()、getchar(),但它们都读取一整行。cin是缓冲输入。您需要“无缓冲”输入。它在不同的平台上可能不同,除非您直接使用文件 类似这样的事情可能会有所帮助: [编辑],记住使用“缓冲”v。“未缓冲”是一个设计决策,两者都是合法的。cin上的“缓冲输入”的“默认值”很有意义,因为用户将“退格”以更正输入行,并且您不希望“杂乱”输入程序。(而且,一般来

可能重复:

<>这听起来可能很荒谬,但是我如何才能从C++中读取CIN中的一个字符(直到输入被按下,只有一个字符)?
我尝试了操作符>>、get()、getchar(),但它们都读取一整行。

cin
是缓冲输入。您需要“无缓冲”输入。它在不同的平台上可能不同,除非您直接使用文件

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


[编辑],记住使用“缓冲”v。“未缓冲”是一个设计决策,两者都是合法的。
cin
上的“缓冲输入”的“默认值”很有意义,因为用户将“退格”以更正输入行,并且您不希望“杂乱”输入程序。(而且,一般来说,像文件中的“缓冲输入”会更有效率。)

可以满足您的需要

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

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

有关更多详细信息,请参阅。

指定的所有方法从
std::cin
读取一个字符。但是,在按下ENTER键之前,该字符无法从操作系统中使用。您使用的是什么操作系统?正如Rob所说,操作系统会将输入保存到。若要在键盘事件发生时获取该事件,您需要一个特定于操作系统的库。@Robᵩ 那么你说的是不可能只读取一个字符?我所知道的所有其他语言都有这样的功能。@Dave-这不是语言问题,而是特定于系统的。如果您在大型机上运行程序,在按Enter键之前,终端不会发送输入。C++对此无能为力!是的,但他没有要求可移植性,他在上面的评论中说他正在使用Win7。此外,正如Adam Shiemke和Rob指出的,要获得键盘事件,您需要一个特定于操作系统的函数。