【发布时间】:2018-01-26 23:52:59
【问题描述】:
所以我正在尝试为我的班级做作业,但由于某种原因,我无法让输出与我需要的匹配。我必须制作一个要求 6 个整数并显示最小的偶数和奇数的程序。将输入 3 个偶数和 3 个奇数,但顺序未知,我们不能使用循环或数组。这个示例正是我目前所拥有的,但我似乎无法理解为什么 a 和 b 不起作用。
int a, b, c, d, e, f, smallEven=0, smallOdd=0;
cout<<"Enter a number:\n";
cin>>a;
if (a%2==0)
smallEven=a;
else if (a%2==1)
smallOdd=a;
cout<<"Enter a number:\n";
cin>>b;
if (b%2==0)
if (smallEven=0)
smallEven=b;
else if (b<smallEven)
smallEven=b;
else if (b%2==1)
if (smallOdd=0)
smallOdd=b;
else if (b<smallOdd)
smallOdd=b;
cout<<smallEven;
cout<<smallOdd;
【问题讨论】:
-
这里:
if (smallEven=0)您必须使用比较,而不是分配。即:if (smallEven==0)。if (smallOdd=0)相同 -
你真的应该在编译时发出警告,当你写
=而不是==时会告诉你。尝试添加命令行开关-Wall -Wextra -Wpedantic -Wconversion。如果由于某种原因不能,缓解措施包括:始终将常量放在等式的 left 上(0=smallEven将被视为错误。)或声明一系列const变量只初始化一次并且永远不会改变。然后编译器会意识到你是否错误地分配了第二次。或者你可以用尾递归替换循环。 -
您还可以通过使用最大可能值 (
std::numeric_limits<int>::max()) 初始化smallEven和smallOdd来简化代码。那么你就不需要测试0了。你可以使用同一段代码六次。 -
您的代码逻辑不起作用,因为您使用的是
=而不是==。效果是截然不同的。除此之外,复制代码(通过复制和粘贴并每次更新变量名)是解决问题的一个糟糕的解决方案 - 如果标记练习的人完全可信,那么这种方法即使它也值得不超过一半的分数作品。考虑将重复的逻辑放入一个函数中,并根据需要多次调用该函数。