首页 > 解决方案 > 从 for 循环中给出最小的数字并使 switch 无限

问题描述

  1. 我不知道如何显示用户给出的范围内的最小数字,并记住这些数字必须是偶数。
  2. 在切换之前,我添加了 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;
}

标签: c++

解决方案


  1. 最简单的方法是查看用户输入的最小数字。如果是偶数,它已经是最小的偶数了。如果它是奇数,则将其加 1(如果它不超过用户输入的最大数字),这是最小的偶数。

  2. 您需要在循环内部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;
}

推荐阅读