Raz Omry
Raz Omry

Reputation: 263

How to compare the digits of 2 integer numbers in c (without arrays and strings)

I am making simple example of little game about guessing numbers.

And I want to build a function which check the numbers and make two values as follows:

1) hits-the number of digits that contain in both number and in same place for both numbers.

2) misses-the number of the digits which contain in both number but not in the same place.

For example:

int systemNumber=1653;
int userGuess=5243;

in this example, in both numbers there are the digits 5 and 3. In both numbers the digit 3 in the same place. But, the digit 5 in systemNumber is not in the same place as userNumber. So, we have here 1 hit and 1 miss.

I've written the code for it with arrays, and I'd like to know if there is a way that I will be able to do this without array and strings.

Here is my code. Please, if you have any improvement for my code, I'd like to know it :)

#include <stdio.h>
#include <stdlib.h>

void checkUserCode(int num1[4], int num2[4]); // declare the function which check the guess

int hits=0, misses=0; // hits and misses in the guess

int main(void)
{
    int userCode=0;
    int userCodeArray[4];
    int systemCodeArray[4]={1, 4, 6, 3};
    int i=0;

    // printing description
    printf("welcome to the guessing game!\n");
    printf("your goal is to guess what is the number of the system!\n");
    printf("the number have 4 digits. Each digit can be between 1 to 6\nGood Luck!\n");

    // input of user guess
    printf("enter number: ");
    scanf("%d", &userCode);

    for (i=3; i>=0; i--)
    {
        userCodeArray[i]=userCode%10;
        userCode=userCode/10;
    }

    checkUserCode(systemCodeArray, userCodeArray);

    printf("there are %d hits and %d misess", hits, misses); // output

    return 0;
}



 /*
   this function gets two arrays and check its elements
   input (parameters): the two arrays (codes) to check
   output (returning): number of hits and misses

   if the element in one array also contains in the other array but not the same index: add a miss
   if the element in one array also contains in the other array and they have the same index: add a hits
*/

void checkUserCode(int num1[4], int num2[4])
{
    int i=0, j=0;

    for (i=0; i<4; i++)
    {
        for (j=0; j<4; j++)
        {
            if(num1[i]==num2[j])
            {
                if (j==i)
                    hits++;
                else
                    misses++;
            }
        }
    }
}

Upvotes: 2

Views: 8070

Answers (1)

RoadRunner
RoadRunner

Reputation: 26335

Here is an example I wrote a while ago, which I tweaked for your problem:

I basically uses two for loops, the outer loop going over the first number, 1653, and the inner loop going over the second number, 5243. It basically compares each individual number in the first number against all the numbers in the second number.

Depending on the counters, it evaluates if equal numbers have been matched in the same positions, using modulo %10 to compare each number.

This is the code:

#include <stdio.h>
#include <stdlib.h>

int
main(void) {
    int num1 = 1653;
    int num2 = 5243;

    int pos1, pos2, hit = 0, miss = 0, i, j;

    pos1 = 0;
    for (i = num1; i > 0; i /= 10) {
        pos2 = 0;

        for (j = num2; j > 0; j /= 10) {

            if (i % 10 == j % 10) {

                if (pos1 == pos2) {
                    hit++;

                } else {
                    miss++;
                }
            }
            pos2++;
        }
        pos1++;
    }

    printf("hits = %d\n", hit);
    printf("misses = %d\n", miss);

    return 0;
}

Upvotes: 3

Related Questions