c++ - 从 for 循环中给出最小的数字并使 switch 无限
问题描述
- 我不知道如何显示用户给出的范围内的最小数字,并记住这些数字必须是偶数。
- 在切换之前,我添加了 for(;;) 以使此切换无限,但结果它给了我对其中一种情况的无限答案。我想回到案件的开始,并有选择权。
这是代码:
#include "pch.h"
#include <iostream>
#include <stdlib.h>
int main()
{
int number1, number2;
std::cout << "Give first number: ";
std::cin >> number1;
std::cout << "Give second number: ";
std::cin >> number2;
while (number1 > number2) {
std::cout << std::endl;
std::cout << "First number must be smaller than the second number!\n";
std::cout << std::endl;
std::cout << "Give first number: ";
std::cin >> number1;
std::cout << "Give second number ";
std::cin >> number2;
}
std::cout << std::endl;
int choice, quantity = 0, sum = 0, table[1000];
std::cout << "MENU:\n";
std::cout << "1. Show even numbers from the smallest to the largest.\n";
std::cout << "2. Show even numbers from the largest to the smallest.\n";
std::cout << "3. Show the amount of even numbers.\n";
std::cout << "4. Show the sum of even numbers.\n";
std::cout << "5. Show the average of even numbers.\n";
std::cout << "6. Show the smallest number of even numbers.\n";
std::cout << "7. Exit.\n";
std::cout << "Choose number: ";
std::cin >> choice;
std::cout << std::endl;
for(;;) {
switch (choice) {
case 1:
for (int i = number1; i <= number2; i++) {
if (i % 2 == 0) std::cout << i << std::endl;
}
break;
case 2:
for (int i = number2; i >= number1; i--) {
if (i % 2 == 0) std::cout << i << std::endl;
}
break;
case 3:
quantity = (number2 - number1) / 2;
quantity++;
std::cout << quantity << std::endl;
break;
case 4:
for (int i = number1; i <= number2; i++) {
if (i % 2 == 0) sum = sum + i;
}
std::cout << sum << std::endl;
break;
case 5:
quantity = (number2 - number1) / 2;
quantity++;
for (int i = number1; i <= number2; i++) {
if (i % 2 == 0) sum = sum + i;
}
std::cout << sum / quantity << std::endl;
break;
case 6:
for (int i = number1; i <= number2; i++) {
if (i % 2 == 0) {
table[i];
}
}
std::cout << table[1] << std::endl;
case 7:
exit(0);
break;
}
}
return 0;
}
解决方案
最简单的方法是查看用户输入的最小数字。如果是偶数,它已经是最小的偶数了。如果它是奇数,则将其加 1(如果它不超过用户输入的最大数字),这是最小的偶数。
您需要在循环内部
for
而不是在循环之前移动菜单输出并提示用户输入for
。
尝试这样的事情:
#include "pch.h"
#include <iostream>
int sumOfEvens(int lowest, int highest)
{
int sum = 0;
for (int i = lowest; i <= highest; i++) {
if (i % 2 == 0) sum += i;
}
return sum;
}
int quantityOfEvens(int lowest, int highest)
{
if (lowest == highest) return (lowest % 2 == 0) ? 1 : 0;
int quantity = diff / 2;
if (diff % 2 != 0) ++quantity;
return quantity;
}
int smallestEven(int lowest, int highest)
{
if (lowest % 2 == 0) return lowest;
if (lowest < highest) return lowest + 1;
return -1;
}
int main()
{
int number1, number2, lowest, highest;
int choice, quantity, smallest;
std::cout << "Give first number: ";
std::cin >> number1;
std::cout << "Give second number: ";
std::cin >> number2;
lowest = (number1 < number2) ? number1 : number2;
highest = (number1 < number2) ? number2 : number1;
do
{
std::cout << "MENU:\n";
std::cout << "1. Show even numbers from the smallest to the largest.\n";
std::cout << "2. Show even numbers from the largest to the smallest.\n";
std::cout << "3. Show the amount of even numbers.\n";
std::cout << "4. Show the sum of even numbers.\n";
std::cout << "5. Show the average of even numbers.\n";
std::cout << "6. Show the smallest number of even numbers.\n";
std::cout << "7. Exit.\n";
std::cout << "Choose number: ";
std::cin >> choice;
std::cout << std::endl;
switch (choice) {
case 1:
for (int i = lowest; i <= highest; i++) {
if (i % 2 == 0) std::cout << i << std::endl;
}
break;
case 2:
for (int i = highest; i >= lowest; i--) {
if (i % 2 == 0) std::cout << i << std::endl;
}
break;
case 3:
std::cout << quantityOfEvens(lowest, highest) << std::endl;
break;
case 4:
std::cout << sumOfEvens(lowest, highest) << std::endl;
break;
case 5:
quantity = quantityOfEvens(lowest, highest);
if (quantity != 0) std::cout << sumOfEvens(lowest, highest) / quantity;
std::cout << std::endl;
break;
case 6:
smallest = smallestEven(lowest, highest);
if (smallest != -1) std:cout << smallest;
cout << std::endl;
break;
}
while (choice != 7);
return 0;
}
推荐阅读
- web-services - 阿帕奇最大连接数
- javascript - 为什么 Prettier 不格式化 VS Code 中的代码?
- node.js - Swagger:跳过未知类型“dateTime”
- javascript - 如何使用 javascript/jquery 以编程方式单击第一个 li 元素?
- reactjs - 同一组件Reactjs中的多个OnClick
- javascript - 删除模态中动态创建的 div 而不在数据提交时关闭它
- excel - 如何使用apache poi在excel单元格之间求和
- java - nanoTime 方法考虑什么样的时间?
- vba - 宏:如果满足条件,则复制粘贴单元格
- sql - 计算多条记录的时间跨度