初学者数组的问题,C ++

时间:2014-12-20 22:29:53

标签: c++ arrays

作业需要三个功能。用户输入数字0-9,直到它们输入10,停止输入,并计算每个数字,然后输出每个数字的计数。只有在用户为其输入数字时才应输出。

我唯一的问题是,对于用户不使用的数组中的每个元素,Xcode将其计为0,因此最终输出具有异常大量的零。其他一切都很好。

这是我的代码

#include <iostream>
using namespace std;

// counter function prototype
void count(int[], int, int []);
// print function prototype
void print(int []);

int main()
{
    // define variables and initialize arrays
    const int SIZE=100;
    int numbers[SIZE], counter[10], input;

    // for loop to set all counter elements to 0
    for (int assign = 0; assign < 10; assign++)
    {
        counter[assign]=0;
    }

    // for loop to collect data
    for (int index=0 ; input != 10 ; index++)
    {
        cout << "Enter a number 0-9, or 10 to terminate: ";
        cin >> input;

        // while loop to ensure input is 0-10
        while (input < 0 || input > 10)
        {
            cout << "Invalid, please enter 0-9 or 10 to terminate: ";
            cin >> input;
        }

        // if statements to sort input
        if (input >= 0 && input <=9)
        {
            numbers[index] = input;
        }
    }

    // call count function
    count(numbers, SIZE, counter);
    // call print function
    print(counter);

    return 0;
}

// counter function
void count(int numbers[], int SIZE, int counter[])
{
    // for loop of counter
    for (int index = 0 ; index < 10 ; index++)
    {
        // for loop of numbers
        for (int tracker=0 ; tracker < SIZE ; tracker++)
        {
            // if statement to count each number
            if (index == numbers[tracker])
            {
                counter[index]++;
            }
        }

    }
    return;
}

// print function
void print(int counter[])
{
    // for loop to print each element
    for (int index=0 ; index < 10 ; index++)
    {
        // if statement to only print numbers that were entered
        if (counter[index] > 0)
        {
            cout << "You entered " << counter[index] << ", " << index << "(s)" << endl;
        }
    }
    return;
}

2 个答案:

答案 0 :(得分:2)

你所指的是&#34; XCode将[ing]计为0&#34;实际上只是未初始化的价值。鉴于您已决定将用户的输入限制为0-9,解决此难题的一种简单方法是,在您调整数组大小后,迭代数组并将每个值设置为 - 1。

此后,当用户完成输入时,而不仅仅是cout每个值,只能使用如下条件打印:

if (counter[index] != -1)
{
    cout << "You entered " << counter[index] << ", " << index << "(s)" << endl;
}

请注意,这种用例更适合链接列表或向量。就目前而言,你没有做任何事情来调整阵列的大小,或者防止溢出,所以如果用户试图输入超过100个数字,你就会遇到严重的问题。

答案 1 :(得分:1)

首先,这不是您确切问题的答案,而是关于如何以更简单的形式编写代码的建议。

我不会为你写这个,因为它是一个任务,而且是一个相当简单的任务。就编码而言,看起来你对事物有很好的处理。

考虑一下:

您需要允许用户输入0-10,并计算所有0-9。一个数组有索引,数组10的整数将保存你用索引计算的那10个数字。现在你只是坐着一些空的int,所以为什么不用它们来算?

代码提示:

++numbers[input];

第二个提示:不要忘记将所有内容初始化为零。