republikunt
republikunt

Reputation: 41

Problems with Beginner Arrays, C++

The assignment requires three functions. The user enters digits 0-9 until they enter a 10, which stops input, and counts each number, then outputs how many of each number has been counted. It should only output if the user entered a number for it.

My only problem is that for every element in the array that the user doesn't use, Xcode counts it as a 0, so the final output has an abnormally large amount of zeros. Everything else works fine.

here is my code

#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;
}

Upvotes: 1

Views: 170

Answers (2)

furkle
furkle

Reputation: 5059

What you're referring to as "XCode count[ing] as a 0" is actually just the uninitialized value. Given that you've decided to restrict the user's input to 0-9, an easy way of solving this dilemma would be, immediately after you size the array, to iterate through the array and set each value to -1.

Thereafter, when the user finishes their input, instead of just couting every single value, only print it with a conditional like the following:

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

Note that this is the kind of use case that's much better suited to something like a linked list or a vector. As it stands, you're not doing anything to resize the array, or guard against overflow, so if the user attempts to enter more than 100 numbers, you'll run into serious problems.

Upvotes: 2

David
David

Reputation: 4873

First off, this isn't an answer to your exact question, but rather a suggestion on how to write your code in a much simpler form.

I'm not going to write this for you, as it's an assignment, and a rather simple one. Looks like you have a good handle on things as far as coding goes.

Consider this:

You need to allow the user to enter 0-10, and count all 0-9's. An array has indices, and a integer of array 10, would hold those 10 numbers you're counting by the indices. Now you just have some empty ints sitting around, so why not use them to count?

A code hint:

++numbers[input];

Second hint: Don't forget to initialize everything to zero.

Upvotes: 1

Related Questions