Fonction qui recherche la différence entre les membres d’un tableau

J’ai besoin d’écrire une fonction qui retournera true si elle a trouvé une différence entre les membres d’un tableau.

Mon code est:

int func1(int *str) { int i; for(i=0;i<*(str+i);i++) { if(*(str+i) == *(str+i+1)) { return 1; } } return 0; } 

Je dois le mettre en œuvre avec des pointeurs.

Le code ci-dessus ne fonctionne pas (logiquement).

Quelqu’un peut aider?

METTRE À JOUR:

J’ai changé mon code comme suit:

 int func1(int *str) { int i,temp=0; for(i=0;i<10-1;i++) { if(*(str+i) == *(str+i+1)) { temp++; if( temp == 10 ) { return 1; } } } return 0; } 

Quel est le problème avec le nouveau code?

Cela ressemble à un devoir pour moi, donc je ne veux pas gâcher le plaisir, mais une chose à propos de C que j’aimerais mentionner: avoir un pointeur sur un tableau ne vous dit rien sur la taille du tableau. Votre fonction devra donc prendre un pointeur et un deuxième argument size_t (ou peut-être un pointeur sur le dernier élément du tableau).

Votre fonction ne prend qu’un seul pointeur sur un tableau, ce qui semble trop peu pour être comparé.

Vous devez append un argument qui spécifie les longueurs des tableaux ou mettre en œuvre une sorte de “politique” qui, par exemple, met fin aux tableaux en utilisant une valeur spécifique.

Vous devriez également envisager d’utiliser la fonction standard memcmp() .

Je ne comprends pas la question (ce que vous essayez de réaliser n’est pas clair) …

Comme d’autres l’ont déjà dit, il n’y a pas de vérification des limites de votre tableau, ce qui est faux …

Voici d’autres commentaires sur votre code:

 // func1 - consider giving functions a meaningful name, it helps people to // understand what the function is supposed to be doing.... // In this instance, it might have been helpful to identify what the expected // return values / inputs of the function are... int func1(int *str) { int i; // Start a counter at 0, loop (adding 1) while // the current value of the counter is less than, the value held in the // array so, {1,2,3,4,0,7} Would terminate on the 0 // This: {1,20,7,14,0,7} Would also terminate on the 0 // This seems wrong, but again, it's unclear what you're trying to do here. for(i=0;i<*(str+i);i++) { // If the current element of the array // is the same as the next element of the array if(*(str+i) == *(str+i+1)) { // return 1 - two numbers next to each other in the // array are the same? return 1; } } // Either: The array contained a digit less than the counter, // Or: It didn't contain two numbers that were the same next to each other. // This seems a bit wrong?!? return 0; } 

Votre question pourrait être améliorée (pour obtenir une réponse plus utile) si vous monsortingez quelles entrées vous attendiez pour renvoyer quelles valeurs de retour.

Sur cette base, "il me faudra écrire une fonction qui retournera la valeur true si sa différence est trouvée entre les membres de array."

En pseudo-code, il semble que vous souhaitiez:

 // Loop, checking we don't overflow. No point checking the last element as // there's nothing after it to check... for (count = 0 to arraysize -1) { // If the current element != the next element, we've found a difference?!? if(arrayElement[count] != arrayElement[count+1) { return true } } return false 

METTRE À JOUR:

Dans votre nouveau code ...

 // You're still assuming the size of 'str' int func1(int *str) { int i,temp=0; // Loop while i < 9, ie 9 times. for(i=0;i<10-1;i++) { if(*(str+i) == *(str+i+1)) { temp++; // Temp can never == 10, you're only going round the loop 9 times... // Maybe it should be (temp == 10-1), but I don't know where the // 10 comes from... if( temp == 10 ) { return 1; } } } return 0; } 

Ce:

 if(*(str+i) == *(str+i+1)) { temp++; // Temp can never == 10, you're only going round the loop 9 times... if( temp == 10 ) { return 1; } } 

Pourrait être:

 // return 0 (FALSE) on first difference if(*(str+i) != *(str+i+1)) { return 0; } 

Si vous avez changé le return 0 à la fin de votre fonction pour return 1