C++ getline cin错误

标签 c++ getline

#include <iostream>
#include <string>
using namespace std;
int main(){
    int a1,a2,a3,a4;

cin>>a1>>a2>>a3>>a4;
string a;
getline(cin,a);
return 0;}

我有这个代码。我无法输入“a”的值。请帮助我

最佳答案

您可以使用 std::ws从输入流中丢弃前导空格。

#include <iostream>
#include <string>

int main()
{
  int a1, a2, a3, a4;
  std::cin >> a1 >> a2 >> a3 >> a4;

  std::string a;
  std::getline(std::cin >> std::ws, a);

  return 0;
}

cin 实际上将整数和一个 '\n' 存储在输入缓冲区中。

因此,当流到达 getline 语句时,它只会得到一个 '\n'


无论如何,直接读取数字是有问题的:当 cin 收到它无法处理的输入时,它会进入失败状态。

它无法处理的输入留在输入流中并被忽略,直到“失败”状态被清除 (std::cin.clear())。

所以你应该检查输入流是否无效(!std::cin):

std::cin >> a1;
if (!std::cin)
{    
  std::cin.clear();
  std::cin.ignore(std::numeric_limits<streamsize>::max(),'\n');

  // Get the input again / handle the error
}

关于C++ getline cin错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35717248/

相关文章:

c - getline 中 memcpy 出现奇怪的段错误

c++ - 在 C++ 中使用 getline()

c++ - 默认声明的属性? (状态设计模式)

c++ - 如何将 4 个字节复制到 sockaddr.sa_data?

c - 在C中的字符串前后添加一些字母

c++ - C++ 中的 Getline 函数将第一个输入作为空字符。它应该这样做吗?

c++ - C++中线程读取文件

c++ - C++线程加入后不会中止

c++ - 如何使用 OpenCV 在 Qt 中启用多窗口?

c++ - 析构函数默默地做了什么?