2012-10-24 52 views
2

由于某些原因,我的程序正在跳过代码段cin.get();cin.ignore();。我不知道为什么会发生这种情况,因为这两个片段在main()作用域内工作正常,而不在if语句中。跳过cin.get()和cin.ignore()

这里是培训相关的代码片段:

input.open(inputFileName); 
if (input.fail()) 
{ 
    cout << "Error: failed to open '" << inputFileName << "'.\n\n"; 
    cout << "Press '' to end the program..."; 
    cin.get(); //cin.ignore() also does nothing. 
    input.close(); 
    exit(1); 
} 

源代码的其余部分可以在这里找到:http://pastebin.com/xy0qMvBq

+1

很可能是因为输入缓冲区中已经有一些输入。所以操作立即完成。 –

回答

2
cin >> inputFileName; 

与该命令时,用户要输入一些“东西“,然后按回车。这将把“东西”,再加上一个换行符到输入缓冲区中。然后,“stuff”将被存储到inputFileName中,并且换行符将被留在那里。这是cin.get()和cin.ignore()读取的内容,它们不会被跳过。

+0

这就是我的想法。但是在'cin >> inputFileName'后面添加'cin.clear()'时,'cin.get()'仍然无法暂停程序。我错误地认为'cin.clear()'清除了输入缓冲区?如果是这样,我会用什么来清除输入缓冲区? –

+1

@JonRurka:不,'cin.clear()'不会清除输入缓冲区。它清除cin上的错误标志,我看不出有理由相信你应该有任何错误。实际上没有可靠的方法来清除输入缓冲区。但是,您可以使用'cin.ignore(numeric_limits :: max(),'\ n')'来忽略字符,直到换行。在你的情况下,你可以调用'cin.ignore()'两次(而不是一次)。或'cin.ignore()'后面跟着'cin.get()'。 –

+0

有两个'cin.ignore();'线条完美运作。感谢您的帮助! –

0

您发布的代码部分绝对正常,在这种情况下cin.get()不会被忽略。