繁体   English   中英

不等待std :: cin.ignore()

[英]Not waiting for std::cin.ignore()

基于此答案 ,我编写了以下代码

#include <iostream>
#include <vector>
#include <cstddef>
#include <limits>

int main()
{
    std::cout << "Enter x and y size, followed by enter: ";
    std::size_t nrOfRows, nrOfCols;
    std::cin >> nrOfRows >> nrOfCols;

    // initialize dynamic array of arrays
    std::vector<std::vector<char>> data(nrOfRows,
        std::vector<char>(nrOfCols, 'O'));

    // print array
    for (std::size_t rowNr = 0; rowNr < nrOfRows; rowNr++)
    {
        std::cout << "Row " << rowNr << ": ";
        for (const auto& el : data[rowNr])
            std::cout << el << " ";
        std::cout << std::endl;
    }
    std::cout << "Press enter to continue: ";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

与VC ++ 14.1或Visual Studio 2017 v15.7.4一起编译。 在第一个提示后,我输入“ 3 5”并输入。 然后,该程序将滚动并退出。 例如,它输出字符串, 并且不等待std::cin.ignore()的最终用户输入(输入std::cin.ignore()

我错过了什么?

编辑

对于反对者/反对者。 该代码确实按所述方式工作。

#include <iostream>
#include <limits>

int main()
{
    std::cout << "Press enter to continue: ";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

您的问题是提取操作( std::cin >> nrOfRows >> nrOfCols; )将在流中留下定界空格,这与getline()不同,后者将消耗定界符。 这通常不是问题,因为>>运算符也将忽略前导空格,但是流中的换行符将导致std::istream::ignore()不等待输入。

要解决此问题,请在输出之前Press enter to continue: std::istream::ignore()调用以放弃任何空格,然后Press enter to continue:消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM