Cin:等待<enter>。两个继续cin.ignore不工作</enter>

时间:2014-05-13 07:31:03

标签: c++ cin

以下是代码:

cout << "Press <ENTER> when you are ready to procceed..." << endl;
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
cin.ignore(std::numeric_limits<streamsize>::max());
cin.clear();
...
cout << "Insert " << nominal << " rubbles into money acceptor and press <ENTER>" << endl;
cin.ignore(std::numeric_limits<streamsize>::max(),'\n');
cin.ignore(std::numeric_limits<streamsize>::max());
cin.clear();

第一次等待但是第二次,它正确地抛出它而没有任何停顿。

我尝试使用cin.ignore(std :: numeric_limits :: max(),'\ n');或cin.get()或cin.ignore()或getchar()。什么都行不通。

我甚至试图要求用户输入一个数字:

{cout << "eof: " << cin.eof(); int num; cin >> num; cout << "eof: " << cin.eof(); }

这也不是第二次了!它在第二次通话时从cin读取'32767'。 并输出:

eof: 0
eof: 1

2 个答案:

答案 0 :(得分:2)

我不清楚你要做什么,或为什么。但是,我写了这个简单的测试应用程序,它对我来说很好用:

#include <iostream>
#include <limits>

int main()
{
    std::cout << "Press enter to start\n";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    std::cout << "Press enter again to begin data entry\n";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

    int i, j;

    std::cout << "Enter a value for i\n";
    std::cin >> i;
    // skip any trailing characters after the number the user entered
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    std::cout << "Enter a value for j\n";
    std::cin >> j;
    // skip any trailing characters after the number the user entered
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

    std::cout << "i was " << i << ", j was " << j << "\n";

    std::cout << "Press enter to continue\n";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
    std::cout << "Press enter again to exit\n";
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');

    return 0;
}

离开你代码中的cin.ignore(std::numeric_limits<streamsize>::max());行迫使我按Enter键(触发“忽略\n代码”然后点击control-D发送EOF来触发第二次ignore来电。我无法复制你的“它没有任何暂停”条件。

此代码在GCC 4.7.2和VS2013 Express下正确构建并运行。

答案 1 :(得分:0)

尝试:

cin.sync()

也许它会起作用......