2017-07-19 46 views
0

我这似乎是多余的我一个代号:似乎是多余的使用CIN作为条件与如果,而

char c; 
    cin>>c; 
    if(cin&&c=='n') 
    //do something 

我不明白引入CIN的值如果不是它总是会有TRUE价值,因为我从来没有遇到任何情况下(在我有限的经验),这istream对象不构造。

同样地,我已经看到了这个问题,以及:

 if(cin) 

请纠正我,我该怎么错在何处。现在人不发布错误插播一部分,我已经知道了,主要部分是什么时候流从 的ios_base ::初始化

+1

http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool –

+0

@MooingDuck所以,当一个流遇到一些错误:你能给我一些例子,链接? – Gaurav

+1

Gurav'int x,cin >> x;'带有用户输入“FUBAR!”,它不能被转换为“int”。 'char'有点困难。 – user4581301

回答

4

std::cin失败失败除了是std::basic_istream<char>一个实例。由于它在条件中使用,我们感兴趣的是它是bool转换运算符。从http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool

std::basic_ios::operator bool

Returns true if the stream has no errors and is ready for I/O operations. Specifically, returns !fail()

从文档,很明显,if(cin)是为了检查是否有cin任何错误。更准确地说,它说“如果cin在上次操作期间没有遇到错误”

条件if(cin&&c=='n')遵循相同的原则,但也检查输入流提供n。换句话说,“如果cin没有遇到错误并返回字符n