我开始用C ++构建一个非常简单的计算器版本。我们的想法是只用两个数字执行基本操作,然后循环回来,这样用户就可以进行新的计算。
程序如下:
#include<iostream>
#include<string>
#include"mathOperations.h"
using namespace std;
int main()
{
int x, y;
string operation;
string repeat = "y";
while (repeat == "y" or "Y")
{
cout << "Welcome! This is a raw version of a calculator - only use two numbers." << endl;
cin >> x >> operation >> y;
if (operation == "+")
{
cout << "Result: " << add(x, y) << endl;
}
else if (operation == "-")
{
cout << "Result: " << subtract(x, y) << endl;
}
else if (operation == "*")
{
cout << "Result: " << multiply(x, y) << endl;
}
else if (operation == "/")
{
cout << "Result: " << divide(x, y) << endl;
}
else
{
cout << "This is not a valid sign. Please choose another one!" << endl;
}
cout << "Wanna go again? Type 'y' or 'n'." << endl;
cin >> repeat;
if (repeat == "n" or "N")
{
cout << "Alright, have a nice day!" << endl;
break;
}
}
}
int add(int x, int y)
{
return x + y;
}
int subtract(int x, int y)
{
return x - y;
}
int multiply(int x, int y)
{
return x * y;
}
int divide(int x, int y)
{
return x / y;
}
注意:有一个&#39; mathOperations.h&#39;我在其中使用了所有函数的前向声明的文件。
问题是每当我输入“&#39; y&#39;为了使其循环,它只是输出以下&#39;如果&#39;声明并打破循环,程序结束。我无法弄清楚为什么会发生这种情况,因为&#39; if&#39;只有当我输入&#39; n&#39;。
时才会运行声明答案 0 :(得分:7)
repeat == "n" or "N"
评估为
(repeat == "n") || "N"
第一个repeat == "n"
评估为true
或false
,具体取决于您的输入,但OR的第二个子句,即"N"
,总是评估为true
因为它是一个字符串文字,衰减到非零const char*
指针,而在C或C ++中,所有非零都被隐式转换为true
。因此,您的OR子句始终为true
,这意味着将始终执行if
块。
如评论中所述,您需要
if(repeat == "n" || repeat == "N") {...}
与第一个while
条件类似。
答案 1 :(得分:1)
好的代码!我尝试使用&#34; ||&#34;代替你的&#34;或&#34;在你的if语句中。可能想用C ++短路布尔值来刷新你的知识。