C++ istream.get() 解压后返回换行符 [复制]

C++ istream.get() after extraction returning newline [duplicate]

提问人:Jacolack 提问时间:11/6/2019 最后编辑:CommunityJacolack 更新时间:11/6/2019 访问量:318

问:

这是最小代码的链接,如果它在这里消失了,那就是如果你想在 cpp.sh 中运行它:

#include <iostream>

int main()
{
  int num1;
  int num2;
  std::cout << "Enter num1: ";
  std::cin >> num1;
  std::cout << std::cin.get() << "\n";
  std::cout << "Enter num2: ";
  std::cin >> num2;
  std::cout << std::cin.get() << "\n";
  std::cout << "You're nums: " << num1 << ", " << num2 << "!\n";
}

我对为什么返回 ASCII 'LF'(解析为“10”)感到困惑,即使已经读取了整行。cin.get()cin >> num1

编辑: 这个问题出现在我使用格式化提取的文件中读取时,我想在格式化提取使用的换行符之后返回下一个可用字节。相反,它返回了该换行符。我很困惑,如果换行符实际上是“下一个可用”字符,这如何不会“搞砸”后续的提取调用。file.get()

C++ IOstream ifstream cin istream

评论

1赞 Yksisarvinen 11/6/2019
Duplicate 是关于 的,但两者都是未格式化的输入函数std::getlinestd::getlinestd::istream::get()
1赞 Yksisarvinen 11/6/2019
如果您的编辑询问的是“为什么后续格式化提取有效”,那么在我链接的副本中也会对此进行解释: 这是因为输入流使用空格作为输入的分隔符,并且默认设置了 std::skipws 操纵器。在开始执行格式化输入时,流将丢弃流中的前导空格。

答:

0赞 Vlad from Moscow 11/6/2019 #1

std::cin.get()当您按 Enter 键时,读取存储在输入缓冲区中语句后面的新行字符。std::cin >> num2;