2014-01-09 96 views
-1

首先,这里是代码:cin.get()不工作,因为它应该

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 >>代码之后死亡;'线。

此方法在我的所有其他练习程序中都可以使用,并且这个程序和其他程序之间没有任何结构上的不同。

有什么建议吗?

(假设正确的头文件和预处理指令到位。)

+0

所以你试图用它来保持程序人为打开,这样你就可以读取输出行了? – Seldom

+0

是的,有没有更好的方法? – akuryo

+0

http://stackoverflow.com/a/20894203/560648请下次搜索。 –

回答

3

您正在阅读的你已经用你的最终get()通话较早进入换行符。您可能需要等待一些其他输入之前忽略所有字符,直到并包括第一个换行符:

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

您可以缩短这个成为

std::cin >> std::ws; 

如果确定需要进入一个非 - 空白字符来终止程序:操纵器提取空白字符,直到达到非空白字符或流结束。

请注意,std::istream::get()实际上确实因为它应该工作!它只是读取下一个字符。它只是不会做你所期望的。

+1

不应['std :: ws'](http://en.cppreference.com/w/cpp/io/manip/ws)也跳过换行符,使'ignore'冗余? –

+0

@MarkRansom:实际上,你是对的:没有必要提取已输入的字符(已更正)。谢谢! –

0

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

相关问题