cin.get()不能正常工作

时间:2014-01-09 22:23:15

标签: c++

首先,这是代码:

using namespace std;
cout << "\aOperation \"HyperHype\" is now activated!\n";
cout << "Enter your agent code:_______\b\b\b\b\b\b\b";
long code;
cin >> code;
cin.get();
cout << "\aYou entered " << code << ".....\n";
cout << "\aCode verified! Proceed with Plan Z3!\n";
cin.get();

return 0;

它编译没有问题,几乎没有缺陷;在'code'从标准输入接收到它的值之后,最后的字符串闪烁可能一毫秒并且程序死掉。正如您所看到的,我在最后一个字符串之后放置了'cin.get()'成员函数以防止这种情况,但它仍然在'cin&gt;&gt;之后继续死亡码;'线。

到目前为止,这种方法适用于我所有的其他练习程序,并且该程序与其他任何程序之间没有任何结构上的差异。

有什么建议吗?

(假设有适当的头文件和预处理器指令。)

2 个答案:

答案 0 :(得分:3)

您正在阅读之前已通过最终get()来电输入的换行符。在等待其他输入之前,您可能希望忽略所有字符(包括第一个换行符):

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

您可以将其缩短为

std::cin >> std::ws;

如果可以要求输入非空白字符来终止程序:std::ws操纵器提取空格字符,直到到达非空白字符或流的末尾。

请注意,std::istream::get()实际上 正常工作!它只是读取下一个字符。它恰好不会做你所期望的。

答案 1 :(得分:0)

添加cin&gt;&gt;代码行而不是两个cin.get()。如果程序只是关闭,那么这可能是最简单的事情。

相关问题