J'ai un problème de codage d'une fonction comparer dans une tâche de mon école.
Layout: p> donc essentiellement c'est comment ma disposition de tâche ressemble-t-elle? Pour comprendre ce que signifie les entrées, c'est qu'ils sont nuls * à des structures où la structure dans .h fichier ressemble à ceci: p> et je suis supposé prendre ces entrées et les comparer basé sur leurs votes. Le problème est que Void * "valeur" parce que j'ai essayé presque tout de la mémoire Comparez les fonctions pour essayer de stocker cette entrée dans cette structure prédéfinie, mais si je le retourne, il renvoie de gros chiffres et je ne sais pas comment prendre les valeurs annulées et comparer eux. P> Je cherche des suggestions de comment devrais-je procéder dans cette situation. P> P>
4 Réponses :
De toute façon, vous devriez lancer Ceci doit être votre implémentation de dans la principale: strong> p> À propos de Cette fonction Valeurs de retour comme suit: p> Si retour si retour Si retour Void * code> à STRUTY Student Code> DataType: Comparer code> Fonction: strong> p> STRCMP code> Valeur de retour: em> strong> p>
Valeur <0 code> Ensuite, il indique STR1 code> est inférieur à STR2 code>. p> l> p> l>
valeur> 0 code> indique que str2 code> est inférieur à str1 code>. p> l> l>
valeur = 0 code> indique STR1 code> est égal à STR2 code>. p> l> l>
ul>
Votre premier exemple doit être * (int *) s1> * (int *) s2 code>. Ou le compilateur peut se plaindre, puisque le pointeur de la norme C n'est pas autorisé.
CASTS (CHAR *) CODE> Non nécessaire dans STRCMP ((char *) S1, (char *) S2) code>.
sur les pointeurs S1 et S2, il y a 2 objets.
Avant de comparer les objets dont vous avez d'abord besoin pour les attacher à les types. P>
Vous devez savoir quels types doivent avoir ces objets qui restent à ces endroits et les jettent à ces types. P>
Donc, vous devez faire P>
struct student *a = (struct student*)s1; struct student *b = (struct student*)s2;
Ceci semble être un 7.22.5.2 Le 1 p>
INT Comparer (vide *, VOID *) code> fonction à transmettre à la fonction qsort () code> fonction. qsort () code> est une fonction C standard : P>
qsort code> fonction strong> p>
int compare( void *p1, void *p2 )
{
struct student *s1 = p1;
struct student *s2 = p2;
return( s1->votes - s2->votes );
}
obtenu!
J'ai utilisé ce que vous avez commoté et je l'ai lancé pour structurer comme ceci: p> et son fonctionnement correctement lorsque j'essaie d'accéder à la valeur de S.V'ayant Une question parce que je ne comprends pas ce pointeur avant () code>, pourquoi doit-il être avant () code> et non comme (S1 S1) (* S1) code> p> p>
Vous devez lancer le
void * code> à un type pouvant être comparé. par exemple.STRCMP ((Char *) S1, (Char *) S2) Code>Comment cette fonction de comparaison est-elle utilisée et appelée? Qu'est-ce que les arguments réels i> sont transmis? Enfin, un indice: Lisez sur Casting I>.
Il compare deux membres "je pense" dans la base de données des étudiants, qui sont stockés dans la structure, comme indiqué. Je ne peux fournir qu'un exemple d'entrée du test automatique qui teste ces fonctions (il existe plus de fonctions dans ma tâche que de simplement comparer): PRNTSCR .Com / Myorsm - L'écran des arguments d'entrée est dans des carrés rouges.
Et oui j'ai essayé de jeter le vide à la STRCMP ou de quoi que ce soit, mais cela ne fonctionne pas, car STRCMP ne se compare que comme une chaîne de Enry? Je pense que cela me donnait fondamentalement des résultats erronés, car je n'ai besoin que de comparer les votes et non de noms des membres
Pour pouvoir vous aider, vous devez nous montrer comment la fonction est censée être utilisée. Quels arguments sont vraiment passés à la fonction? Veuillez créer un exemple de reproductible minimal pour nous montrer (en modifiant la question).
"J'ai presque essayé presque de tout de la mémoire Comparez les fonctions pour tenter de stocker cette entrée dans cette structure prédéfinie" -> Publier certaines de ces tentatives
S'il vous plaît vérifier ma réponse. Je l'ai édité et j'ai amélioré ....