C++ '==';找不到操作员
很明显,这个prgoram不起作用。软件告诉我缺少“==”运算符。有人能告诉我该怎么做,并解释他/她的解决方案为什么有效吗C++ '==';找不到操作员,c++,if-statement,operator-keyword,C++,If Statement,Operator Keyword,很明显,这个prgoram不起作用。软件告诉我缺少“==”运算符。有人能告诉我该怎么做,并解释他/她的解决方案为什么有效吗 #include <iostream> using namespace std; int main() { int var{ 0 }; cout << "Bitte eine Ganzzahl eingeben: "; if ((cin >> var) == false) { cerr <
#include <iostream>
using namespace std;
int main() {
int var{ 0 };
cout << "Bitte eine Ganzzahl eingeben: ";
if ((cin >> var) == false) {
cerr << "Falsche Eingabe - Keine Zahl\n";
exit(1);
}
system("pause");
//return 0;
}
#包括
使用名称空间std;
int main(){
int var{0};
cout>var)==false){
在C++中,流的状态可以用<代码>显式操作符BoOL/代码>进行测试,这意味着它可以直接用作<代码>中的条件,如果语句,但不能隐式转换为<代码>布尔O/COD>与“代码>伪相比。因此,您需要更为习惯的
if (cin >> var)
来测试状态
为什么可以在if语句中执行“cin”
因为条件可以是任何表达式,只要它的结果可以转换为bool
。>
运算符返回对流的引用,该引用可以通过我上面描述的运算符进行转换。std::istream
具有转换运算符,但它必须是显式的():
可以使用显式转换运算符:
if ( (bool)(cin >> var) == false) {
cerr << "Falsche Eingabe - Keine Zahl\n";
}
if((bool)(cin>>var)=false){
cerr>var){
cerrFirstcin
不是您执行的东西,比如一些其他语言的print
命令。它是表示字符标准输入流的istream类的对象
操作符>
从这些流中提取格式化输入
istream& operator>> (int& val);
这意味着它将返回对istream本身的引用,这样您就可以像
cin >> foo >> bar;
因此,您无法将作为参考的cin>>foo
的结果与常量false
进行比较
另一方面,运算符“!”重载,其含义与fail
相同,因此您可以检查操作是否成功,如下所示
if ( ! (cin >> var) ) {
cerr << "something is going wrong" << endl;
}
if(!(cin>>var)){
cerr这对我来说很好。@MooseBoys它只在C++11之前编译,因为它将使用void*
到bool
隐式转换。@MooseBoys:它将使用过时的标准库(其中流转换为指针类型,而不是bool
),但不是现代的库(显式转换为bool
)。显然IDEOne不兼容-它被设置为C++14模式并且仍然可以工作。当然,cl.exe会抱怨。第一句意思是:输入一个整数。第二句意思是:输入错误。但我认为这与此无关,
cin >> foo >> bar;
if ( ! (cin >> var) ) {
cerr << "something is going wrong" << endl;
}