首页 > 解决方案 > 如何将值输入到已定义的数组中?

问题描述

编写一个程序,将 10 个给定数字输出到两行中,一行用于奇数,一行用于偶数。使用数组。

在为用户输入的 10 个数字声明了一个输入数组后,我尝试为奇数和偶数值声明单独的数组,这些数组稍后将通过 for 循环进行排序。

当我需要将这些值n分配给奇数或偶数数组时,我会卡住。

int input[10];
int odd[]{};
int even[]{};
int n;

for(n=0;n<10;n++)
{
    if ((input[n])%2==0)
    {
      odd[n] = n; 
    }
    else
    {
      even[n] = n;
    }

标签: c++arraysfor-loop

解决方案


您不需要为此进行动态分配。我们可以只制作两个数组并根据需要填充它们。

static constexpr std::size_t N = 10;
const int input[N] = { /* user input here */ };

int odd[N] = {};
int even[N] = {};

std::size_t countOdd = 0;
std::size_t countEven = 0;

for (std::size_t i = 0; i < N; i++)
{
    if (input[i] % 2 == 0)
       even[countEven++] = input[i];
    else
       odd[countOdd++] = input[i];
}

在结尾和总共会有N(10)个元素“浪费” (有一些未知的分布),但谁在乎呢?十个自动存储!没什么。只要我们跟踪我们“关心”的赔率和偶数,一切都很好。oddevenint

现在对于两行输出:

for (std::size_t i = 0; i < countOdd; i++)
    std::cout << odd[i] << ' ';
std::cout << '\n';

for (std::size_t i = 0; i < countEven; i++)
    std::cout << even[i] << ' ';
std::cout << '\n';

简单的!

std::size_t在适当的地方使用了数组索引,而不是int,但如果你愿意,你现在可以忽略它。我还修复了您的模运算,并且您存储的是偶数/奇数值的索引,而不是值本身。


完整程序示例:

#include <iostream>
#include <cstddef>  // for std::size_t

int main()
{
    static constexpr std::size_t N = 10;
    const int input[N] = { 1,5,9,14,3,99,82,42,43,70};

    int odd[N] = {};
    int even[N] = {};

    std::size_t countOdd = 0;
    std::size_t countEven = 0;

    for (std::size_t i = 0; i < N; i++)
    {
        if (input[i] % 2 == 0)
           even[countEven++] = input[i];
        else
           odd[countOdd++] = input[i];
    }

    for (std::size_t i = 0; i < countOdd; i++)
        std::cout << odd[i] << ' ';
    std::cout << '\n';

    for (std::size_t i = 0; i < countEven; i++)
        std::cout << even[i] << ' ';
    std::cout << '\n';
}

// g++ -std=c++17 -O2 -Wall -pedantic -pthread main.cpp && ./a.out
// 1 5 9 3 99 43 
// 14 82 42 70 

现场演示


推荐阅读