【发布时间】:2021-05-15 11:25:19
【问题描述】:
#include <iostream>
#include <string.h>
using namespace std;
struct menuItemType {
string mennuItem;
double menuPrice;
};
int main() {
int choice, flag[8]={0}, iNum;
cout << "Our menu includes:" << endl << "1. Plain Egg $1.45" << endl << "2.Bacon and Egg $2.45" << endl << "3. Muffin $0.99" << endl << "4. French Toast $1.99" << endl <<"5. Fruit Basket $2.49" << endl << "6. Cereal $0.69" << endl <<"7. Coffee $0.50" << endl <<"8. Tea $0.75" << endl;
menuItemType menuList[8]={{"Plain Egg",1.45},{"Bacon and Egg",2.45},{"Muffin",0.99},{"French Toast",1.99},{"Fruit Basket",2.49}, {"Cereal",1.99},{"Coffee",0.50},{"Tea",0.45}};
cout << "how many items you wish to order?";
cin >> choice;
for (int i=0;i<choice;i++) {
cout << "enter item number" << i;
cin >> iNum;
iNum==1?flag[0]++:iNum==2?flag[1]++:iNum==3?flag[2]++:iNum==4?flag[3]++:iNum==5?flag[4]++:iNum==6?flag[5]++:iNum==7?flag[6]++:iNum==8?flag[7]++:;
}
return 0;
}
我不明白为什么它会在 iNum==1?flag[0]++:iNum==2?flag[1]++:iNum==3?flag[2]++:iNum==4?flag[3]++:iNum==5?flag[4]++:iNum==6?flag[5]++:iNum==7?flag[6]++:iNum==8?flag[7]++:; 上抛出错误。
错误是 expected primary-expression before ';'令牌,如果我删除最后一个分号,它会引发另一个错误expected ':' before ';'令牌。
【问题讨论】:
-
请不要写
iNum==1?flag[0]++:iNum==2?flag[1]++:iNum==3?flag[2]++:iNum==4?flag[3]++:iNum==5?flag[4]++:iNum==6?flag[5]++:iNum==7?flag[6]++:iNum==8?flag[7]++:;之类的代码。相反,使用 if 语句。您将获得相同的性能,并且代码将更具可读性。 -
这种代码很难调试,就像您刚刚遇到的那样。使用更实用的 if-else 语句。
-
@NathanOliver 好的,但你能解释一下错误吗?我使用这个运算符来缩短代码而不是为了性能:)
-
为什么要缩短代码?它的长度对台式计算机没有实际意义。从不得不问这个问题中可以看出,缩短的代码通常很难理解。我无法解释错误的原因是我不会试图解析条件运算符的嵌套。
-
@ShayanHasanKhan
if (iNum >= 1 && iNum <= 8) ++flag[iNum-1];-- 你觉得什么更清楚?你的原始代码,还是这个?
标签: c++ nested conditional-operator