C++ 为什么我的情况不起作用?
我有以下代码:C++ 为什么我的情况不起作用?,c++,function,math,output,C++,Function,Math,Output,我有以下代码: #include <iostream> using namespace std; int a, b, sqr; const int P = 3.14; //Later for circles... string s1; class MathsFunctions{ public: virtual void square(int a, int b)=0; }; class TriangleFunc: public MathsFunctions{ public:
#include <iostream>
using namespace std;
int a, b, sqr;
const int P = 3.14; //Later for circles...
string s1;
class MathsFunctions{
public:
virtual void square(int a, int b)=0;
};
class TriangleFunc: public MathsFunctions{
public:
void square(int a, int b){
sqr = (a * b)/2;
cout << "Square of triangle is: "<< sqr << endl;
}
};
class RectangleFunc: public MathsFunctions{
public:
void square(int a, int b){
sqr = a * b;
cout << "Square of rectangle is: "<< sqr << endl;
}
};
void getNumbers(){
cout << "Enter the first number: "<<endl;
cin >> a;
cout << "Enter the second number: "<< endl;
cin >> b;
}
void chooseTheFigure(){
cout << "Choose the figure (rectangle or triangle): "<< endl;
cin >> s1;
}
int main(){
chooseTheFigure();
getNumbers();
if(s1 == "rectangle" || "Rectangle"){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
if (s1 == "triangle" || "Triangle"){
TriangleFunc t;
MathsFunctions *m = &t;
m -> square(a,b);
};
}
我创建了一个计算矩形或三角形的平方的程序。主程序中有一个条件,但最终程序显示了两个结果。我该如何改进呢
程序输出的屏幕截图:
这与您认为的不同:
if(s1 == "rectangle" || "Rectangle"){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
上面的if表达式计算为:
if((s1 == "rectangle") || ("Rectangle"))
// ^^^^^^^^^^^^^^^^^ or ^^^^^^^^^^
现在,这里的第二部分,矩形是一个字符串文本,它隐式地转换为有效指针。除nullptr或类似于零的整数以外的任何指针的计算结果都是true-始终
你可能想写:
if((s1 == "rectangle") || (s1 == "Rectangle")){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
--------------------
代码中还有其他一些细微差别,例如
基类中没有虚拟析构函数
这:
p将不会保持您期望的值
这与您认为的不同:
if(s1 == "rectangle" || "Rectangle"){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
上面的if表达式计算为:
if((s1 == "rectangle") || ("Rectangle"))
// ^^^^^^^^^^^^^^^^^ or ^^^^^^^^^^
现在,这里的第二部分,矩形是一个字符串文本,它隐式地转换为有效指针。除nullptr或类似于零的整数以外的任何指针的计算结果都是true-始终
你可能想写:
if((s1 == "rectangle") || (s1 == "Rectangle")){
RectangleFunc r;
MathsFunctions * m = &r;
m -> square(a,b);
};
--------------------
代码中还有其他一些细微差别,例如
基类中没有虚拟析构函数
这:
p将不会保持您期望的值
1.正如WhiZtim指出的,或操作员需要纠正
if(s1 == "rectangle" || "Rectangle") {...}
将始终为true,因为矩形不为null
您应该为字符串使用字符串比较函数,请参见strcmpi
编辑
关于字符串函数,请查看以下内容:
1.正如WhiZtim指出的,或操作员需要纠正
if(s1 == "rectangle" || "Rectangle") {...}
将始终为true,因为矩形不为null
您应该为字符串使用字符串比较函数,请参见strcmpi
编辑
关于字符串函数,请查看以下内容:
当这是真的时,有两个条件,第一个是您所期望的,第二个是您的bug,因为这是您现在在代码中想要说的:
1如果输入字符串s1与字符串文字矩形相等,则返回true,或
2如果字符串文字矩形本身被视为真值。
由于此转换本质上是一个空指针检查,并且字符串文本从不为空,因此这种情况始终为真
您需要的是重复测试:
if(s1 == "rectangle" || s1 == "Rectangle"){
当这是真的时,有两个条件,第一个是您所期望的,第二个是您的bug,因为这是您现在在代码中想要说的:
1如果输入字符串s1与字符串文字矩形相等,则返回true,或
2如果字符串文字矩形本身被视为真值。
由于此转换本质上是一个空指针检查,并且字符串文本从不为空,因此这种情况始终为真
您需要的是重复测试:
if(s1 == "rectangle" || s1 == "Rectangle"){
任何使用屏幕阅读器的人都将很难读取该输出。s1==矩形| | s1==矩形s1==三角形| | s1==Triangle@KillzoneKid谢谢你!我甚至无法想象这个错误是如此愚蠢@MichealO'Dwyer明白了!Thanks@Nikita为什么要使用要在类之间共享的全局变量?您需要学习如何使用成员变量!任何使用屏幕阅读器的人都将很难读取该输出。s1==矩形| | s1==矩形s1==三角形| | s1==Triangle@KillzoneKid谢谢你!我甚至无法想象这个错误是如此愚蠢@MichealO'Dwyer明白了!Thanks@Nikita为什么要使用要在类之间共享的全局变量?您需要学习如何使用成员变量!非常感谢你!非常感谢你!非常感谢。我明白。只是你的第二点有点问题。C++中没有标准函数,如STRCPMI。其次,如果你的意思是,对于std::string,绝对没有上帝的理由这么做。如果你需要那种风格,那就有。而且对于一些角落的箱子,它通常比strcmp快。谢谢你指出这一点。。已经失去联系一段时间了:谢谢!我明白。只是你的第二点有点问题。C++中没有标准函数,如STRCPMI。其次,如果你的意思是,对于std::string,绝对没有上帝的理由这么做。如果你需要那种风格,那就有。而且对于一些角落的箱子,它通常比strcmp快。谢谢你指出这一点。。已经失去联系一段时间了: