-1
votes

Fonction qui prend deux vides * et les compare

J'ai un problème de codage d'une fonction comparer dans une tâche de mon école.

Layout: xxx

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: xxx

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.

Je cherche des suggestions de comment devrais-je procéder dans cette situation.


7 commentaires

Vous devez lancer le void * à un type pouvant être comparé. par exemple. STRCMP ((Char *) S1, (Char *) S2)


Comment cette fonction de comparaison est-elle utilisée et appelée? Qu'est-ce que les arguments réels sont transmis? Enfin, un indice: Lisez sur Casting .


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é ....


4 Réponses :


0
votes

De toute façon, vous devriez lancer Void * à STRUTY Student DataType:

Ceci doit être votre implémentation de Comparer Fonction: xxx

dans la principale: xxx

À propos de STRCMP Valeur de retour:

Cette fonction Valeurs de retour comme suit:

  • Si retour Valeur <0 Ensuite, il indique STR1 est inférieur à STR2 .

  • si retour valeur> 0 indique que str2 est inférieur à str1 .

  • Si retour valeur = 0 indique STR1 est égal à STR2 .

    essayez-y en ligne


2 commentaires

Votre premier exemple doit être * (int *) s1> * (int *) s2 . Ou le compilateur peut se plaindre, puisque le pointeur de la norme C n'est pas autorisé.


CASTS (CHAR *) Non nécessaire dans STRCMP ((char *) S1, (char *) S2) .



1
votes

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;


0 commentaires

0
votes

Ceci semble être un INT Comparer (vide *, VOID *) code> fonction à transmettre à la fonction qsort () code> fonction.

qsort () code> est une fonction C standard : P>

7.22.5.2 Le qsort code> fonction strong> p>

Synopsis forte> p>

1 p>

int compare( void *p1, void *p2 )
{
    struct student *s1 = p1;
    struct student *s2 = p2;

    return( s1->votes - s2->votes );
}


0 commentaires

0
votes

obtenu!

J'ai utilisé ce que vous avez commoté ​​et je l'ai lancé pour structurer comme ceci: xxx

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 () , pourquoi doit-il être avant () et non comme (S1 S1) (* S1)


0 commentaires