我遇到的问题是,当一个人在控制台中键入内容时,我想要确切地看到输入缓冲区中的内容我知道如何查看它的唯一方法是使用std :: cin :: getline()或std: :getline(),但我认为这两个都写入char指针或std :: string对象,具体取决于系统特定的行尾字符是否合适 . 例如,我认为在Windows上如果你在控制台上按Enter键它会输入'\ r''\ n',但是当我尝试从char指针或字符串对象中读取它时它们不显示任何'' R” . 例如,如果我在控制台中键入单词hello,我怀疑windows放置:
'h''e''l''''o''\ r''\ n'
进入缓冲区,但在char指针或字符串对象中我只看到“你好” . 我基本上想要看看输入缓冲区中的内容 . 我可以在一个循环中逐个从缓冲区中提取每个字符,而不会抛出空格字符吗?
2 回答
std::cin是std::basic_istream,可以这样操作 .
通常,您可以使用>>或getline来读取流 . 这两个都是"know when to stop" .
但是如果你想用
\n
来查看缓冲区,那么假定你将使用换行符字符从控制台传递流,并且你用来读取它的函数不会是换行符 .你可以copy the buffer to a string . 但请记住,你必须以其他方式signal the EOF .
在Windows上,如果我键入helloEnterthereEnter后跟Ctl z(必须在Windows的新行上),那么我看到:
因此,在此示例中,包括换行符在内的所有内容都存储在
std::string
中 .我添加了以下内容以明确显示各个字符:
对于相同的输入,它产生:
所以这表明只有
\n
从控制台传递,没有找到\r
. 我使用Windows 10进行此测试,但我认为这已经有一段时间了 .我认为这应该有效: