Using `getline(cin, s);` after using `cin >> n;`

前端 未结 3 1385
广开言路
广开言路 2021-01-07 02:02
int n;
std::cin >> n;

std::string s = \"\";
std::getline(cin, s);

I noticed that if I use cin, my program would hang the next t

相关标签:
3条回答
  • 2021-01-07 02:18

    You need to clear the input stream - try adding the following after your cin:

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

    The accepted answer to this question gives a good explanation of why/when this is required.

    0 讨论(0)
  • 2021-01-07 02:22

    std::cin leaves an extraneous \n in the input stream. When you use std::getline(), you are retrieving that \n.

    Although @WilliamLannen's answer works if you really need std::cin, you are better off using this method:

    int n;
    std::string sn;
    std::stringstream ssn;
    
    std::getline(std::cin, sn);
    ssn << sn;
    ssn >> n;
    

    References

    http://www.daniweb.com/software-development/cpp/tutorials/71858

    0 讨论(0)
  • 2021-01-07 02:25
    int n;
    std::cin >> n;
    
    
    std::cin.get() //<--- use cin.get() here ...
    
    
    std::string s = "";
    std::getline(cin, s);
    
    0 讨论(0)
提交回复
热议问题