web-dev-qa-db-fra.com

Comment comparer deux tableaux en langage de programmation C?

Je veux comparer deux tableaux différents qui sont tous les deux int. Un tableau est statique et contient des nombres de 1 à 10 et le second tableau demande à l'utilisateur de saisir dix nombres différents et le programme vérifie quels éléments des deux tableaux sont égaux.

#include <stdio.h>
int main(void) {

        int array1[] = {1,2,3,4,5,6,7,8,9,10};
        int array2[10];
        int i;

        for (i=0;i<11;i++) {

                printf("Enter numbers: ");
                scanf("%d", &array2);
        }

        for (i=0;i<11;i++) {

                if (array1[i] != array2[i]) {

                        printf("Not equal \n");
                }
                else {
                        printf("They are equal. \n");
                }
        }
}

Le programme dit toujours non égal même si je saisis un nombre égal à un nombre stocké dans le premier tableau.

3
Hassen Fatima
scanf("%d", &array2);

Vous ne mettez jamais à jour l'index de array2 lorsque vous obtenez une valeur à partir de l'entrée.

Essayer

scanf("%d", &array2[i]);

Pour comparer, vous pouvez également utiliser memcmp pour comparer la mémoire:

memcmp(array1, array2, sizeof(array1));
1
Inisheer

Les tableaux utilisent des indices de base zéro pour un début. Si vous remplissez incorrectement array2, vous voudrez probablement modifier votre première boucle comme suit:

    for (i=0;i<10;i++) 
    {
            printf("Enter numbers: ");
            scanf("%d", &array2[i]);
    }

car votre code actuel passe simplement l'adresse de array2 en tant qu'argument à scanf.

Puis changez la deuxième boucle conditionnelle à

 for (i=0;i<10;i++) 

dans votre boucle de comparaison afin d’éviter d’accéder aux éléments situés au-delà des limites de votre tableau.

Actuellement, votre deuxième boucle accède aux éléments dont les indices sont compris entre 0 et 10, mais array1 ne contient que 10 éléments. Vous avez donc un comportement indéfini avec votre code actuel.

3
mathematician1975
#include <stdio.h>
int main(void) {

        int array1[] = {1,2,3,4,5,6,7,8,9,10};
        int array2[10];
        int i;

        for (i=0;i<10;i++) { //fixed the range here

                printf("Enter numbers: ");
                scanf("%d", &array2[i]); //fixed the indexing
        }

        for (i=0;i<10;i++) { //fixed the range here

                if (array1[i] != array2[i]) {

                        printf("Not equal \n");
                }
                else {
                        printf("They are equal. \n");
                }
        }
}
1
Enamul Hassan

J'essaie de répondre à la réponse, même si je suis un débutant au programme C.

Selon votre programme écrit ci-dessus, vous saisissez et conservez les valeurs dans int array2[10] qui comporte 11 éléments. 

Rappelez-vous que le premier élément de ce tableau est indexé par zéro. Ex: array2[0], jusqu’à atteindre le dernier élément qui est array2[10], vous en avez compté 11.

Maintenant, array1 a écrit les valeurs prédéfinies qui seront comparées à vos valeurs d’entrée. Entrez et stockez vos valeurs dans array2[].

#include <stdio.h>

int main(void) {
    int array1[] = {1,2,3,4,5,6,7,8,9,10};
    int array2[10];
    int i;

    for (i=0;i<10;i++) { //fixed the range here
        printf("Enter numbers: ");
        scanf("%d", &array2[i]); //fixed the indexing

        if (array1[i] != array2[i]) {
            printf("Not equal \n");
        }
        else {
            printf("They are equal. \n");
        }
    }
}
0
Goma Joaquim