我遇到了一个问题,我似乎无法弄清楚我做错了什么。我必须编写这个程序,由于某种原因,它不允许我将char变量与循环中的常量char变量进行比较,而且它不会让我两个双变量?有人可以帮忙吗?
// Nathan Brown
// Nathan Owen Brown's Space Travle Company
// CSCI 1010 PASS9
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
void mostPowerful (double &power1, double &power2, double &power3)
{
if (power1 > power2 && power1 > power3)
cout << "The largest power output is " << power1 << " and is Jetpack number 1" << endl;
else if (power2 > power1 && power2 > power3)
cout << "The largest power output is " << power2 << " and is Jetpack number 2" << endl;
else if (power3 > power1 && power3 > power2)
cout << "The largest power output is " << power3 << " and is Jetpack number 3" << endl;
}
void discountResults (double &price, double &disAmount)
{
disAmount = price * disAmount;
price = price - disAmount;
}
void howMany (double &moneyAvail, double &cost)
{
int howMany;
double leftOver;
howMany = moneyAvail / cost;
leftOver = moneyAvail % cost;
moneyAvail = howMany;
cost = leftOver;
}
char menu ()
{
char choice;
cout << "Welcom to Nathan Owen Brown's Space Travel Company" << endl;
cout << "(M)ost Powerful Calculation" << endl;
cout << "(D)iscount Calculation" << endl;
cout << "(H)ow Many Calculation" << endl;
cout << "(Q)uit" << endl;
cout << endl;
cout << endl;
cout << "Please enter the option (M, D, H, or Q) ";
cin >> choice;
return choice;
}
int main ()
{
double power1, power2, power3, price, disAmount, moneyAvail, cost;
char choice;
menu ();
while (choice != "Q "|| choice != "q")
{
if (choice == "M" || choice == "m" )
{
cout << "Please enter 3 power output measurements in MW: " << endl;
cin >> power1 >> power2 >> power3;
mostPowerful (power1, power2, power3);
}
else if (choice == "D" || choice == "d")
{
cout << "Please enter a price and a discount amount: " << endl;
cin >> price >> disAmount;
discountResults (price, disAmount);
cout << "The discount amount is " << disAmount << " and the dicounted price is " << price << "." << endl;
}
else if (choice == "H" || choice == "h")
{
cout << "Please enter amount available and cost of each: " << endl;
cin >> moneyAvail >> cost;
howMany (moneyAvail, cost);
cout << "You can buy " << moneyAvail << " and have " << cost << " left over." << endl;
}
menu ();
}
system ("PAUSE");
return 0;
}
答案 0 :(得分:2)
choice != "Q "
您要将char
与string
进行比较,因此类型不匹配,您必须执行以下操作:
choice != 'Q' //this is char literal
%
仅适用于整数,因为“余数”的正常数学概念仅适用于整数除法。即需要产生整数商的除法。因此,您无法在%
上应用double
。
答案 1 :(得分:0)
关于while条件还有一个逻辑错误。你的初始线是
根据tacp纠正的while (choice != "Q "|| choice != "q")
看起来像
while (choice != 'Q' || choice != 'q')
。
这在逻辑上仍然不正确:
假设您想知道用户何时输入'q'或'Q',那么您将结束循环。如果满足任何条件,则以下表达式为真
choice == 'Q' || choice == 'q'
但这并不好,因为只要表达式为真,while循环就会继续。只要用户不退出,你就需要它。所以你否定了初始表达
!(choice == 'Q' || choice == 'q')
使用一些布尔逻辑可以得到正确的版本(请注意&amp;&amp; ):
choice != 'Q' && choice != 'q'