部分填充数组C ++

时间:2014-04-08 01:35:08

标签: c++ arrays partial

嗨,如果我做错了,第一次问对不起

对于我的家庭作业,我必须创建一个程序,要求用户输入最多20个或更少的整数,它将以相反的顺序输出它们,并给出数组中最大和最小的整数。用户可以通过将其终止为0来输入少于20个整数。我已将其中的大部分内容删除,但我有几个问题。

  1. 部分分配指出,如果用户输入20个整数,它将自动反转顺序,但在我的程序中,用户必须输入21个整数然后才会反转它。

  2. 当我试图找出最小值时,它给了我一个巨大的负数,如-76534534。

  3. 以下是代码:

    #include <iostream>
    using namespace std;
    const int max_integers = 20;
    void intro( );
    void array(int array[], int size, int& x);
    void reverse(const int array[], int x);
    void high(const int array[], int x);
    void low (const int array[], int x);
    int main( )
    {
        int input[max_integers];
        int x;
    
        intro( );
        array(input, max_integers, x);
        reverse(input, x);
        high(input, x);
        low(input, x);
        return 0;
    }
    
    void intro ( )
    {
        cout << "This program will read in a list of integers and put them into an array." << endl;
        cout << "The maximum number of integers it will read in is 20.  The program will then " << endl;
        cout << "output the numbers in reverse order and give you the largest and smallest " << endl;
        cout << "integers." << endl;
    }
    
    void array (int input[], int size, int& x)
    {
        cout << "Enter a list of integers (0 to end list).  Max number you can enter is " << size << "." << endl;
        int next;
        int index = 0;
        cin >> next;
        while ((next > 0) && (index < size))
        {
            input[index] = next;
            index++;
            cin >> next;
        }
        x = index;
        cout << endl;
    }
    
    void reverse (const int input[], int x)
    {
        cout << "The integers in reverse order are:" << endl;
        for (int index = 0; x > index; x--)
        {
            cout << input[x-1];
            cout << endl;
        }   
    }
    
    void high (const int input[], int x)
    {
        int high = 0;
        for (int index = 0; x > index; x--)
        {
            if (input[x] > high)
            {
                high = input[x];
            }
        }
    
        cout << "The largest value entered is " << high << "." << endl;
    }
    
    void low (const int input[], int x)
    {
        int low = 999999;
        for (int index = 0; x >= index; x--)
        {
            if ((input[x] < low) && (low > 0))
            {
                low = input[x];
            }
        }
    
        cout << "The smallest value entered is " << low << "." << endl;
    }
    

1 个答案:

答案 0 :(得分:0)

<强> 1 你在while循环之前要求一个整数,然后循环20次询问一个数字。使用do-while循环解决此问题:

do {
    cin >> next;
    input[index] = next;
    index++;
} while ((next > 0) && (index < size))

2:如果用户输入少于20个数字,则数组中的值未初始化。这是未定义的行为。您可以通过默认初始化来解决此问题:

int input[max_integers] = { };