首先,这是代码:
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;之后继续死亡码;'线。
到目前为止,这种方法适用于我所有的其他练习程序,并且该程序与其他任何程序之间没有任何结构上的差异。
有什么建议吗?
(假设有适当的头文件和预处理器指令。)
答案 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()。如果程序只是关闭,那么这可能是最简单的事情。