Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
842 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Condition et strcmp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Condition et strcmp

n°836782
Hurric'
Posté le 30-08-2004 à 16:18:22  profilanswer
 

bon, salut à tous!!!!
 
J'essaye de modifier un programme en C pour les besoins de mon responsable et comme je ne le maitrise pas et que ca marche pas,  je vous soumet la partie que j'ai faite: en fait c'est une simple condition qui dit
si(A==true et (b == true ou c == true)
alors rien  

Citation :

if ( (strcmp("10.3.2.15",a)==0) && ( (strcmp("0:4:33:b7:41:52",e1)==0 ) ||
  (strcmp("0:4:33:b7:41:53",e1)==0)) )
  return;


merci à ceux qui prendront qques minutyes pour repondre

mood
Publicité
Posté le 30-08-2004 à 16:18:22  profilanswer
 

n°836789
Taz
bisounours-codeur
Posté le 30-08-2004 à 16:23:07  profilanswer
 

si(A==true et (b == true ou c == true)  
 
 
t'as une drôle de façon de penser toi ...
 
 
sinon personne voit de problème nulle part : si l'adresse IP est "10.3.2.15" et si l'adresse MAC est "0:4:33:b7:41:52" ou bien "0:4:33:b7:41:53" alors arrêter

n°836791
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 16:23:44  profilanswer
 

euh il faut plus de précision :
1/ qu'est-ce qui ne marche pas ? (syntaxe ou bug d'exécution)
2/ type de a, type de e1
:)

n°836818
fodger
ARRRACHHEE TTAAA FFFOUUFFOUNE!
Posté le 30-08-2004 à 16:49:49  profilanswer
 

Pour commencer trop de parenthèses, pas besoin d'alourdir la syntaxe.
 

Code :
  1. if (strcmp("10.3.2.15",a)==0 && (strcmp("0:4:33:b7:41:52",e1)==0 || strcmp("0:4:33:b7:41:53",e1)==0))
  2.   return;

n°836827
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 16:57:12  profilanswer
 

+1 utilisez au maximum les règles de priorités ISO/ANSI C.

n°836837
Hurric'
Posté le 30-08-2004 à 17:03:36  profilanswer
 

pains-aux-raisins a écrit :


2/ type de a, type de e1
:)


arf, comme quoi on peut etre programmeur et faire des erreurs de debutant quand on se trouve sur un nouveau langage (moi c plus java)...à moins que je ne sois pas bien reveillé :/

Citation :

register u_int32_t a, register u_char *e1,


et oui je voulais donc comparer une string avec des entiers...
dans le programme apparemment il y a un transtypage:

Citation :

intoa(a)


 
Sinon, pour expliquer mes besoins:
j'utilise arpwatch qui couple les MAC address à leur IP correspondantes et lorsqu'une MAC address n'a pas la mm IP que precedemment alors il envoie un mail... or mon problème c'est qu'il y a une machine avec deux MAC pour la même IP(ne me demandait pas pk je ne suis qu'étudiant pris en intérim' apres son stage avant de reprendre les cours)...si je laisse cela comme ca mon responsable peut recevoir plusieurs dizaines de mails par jour(voir des centaines) donc j'ai pensé à une condition qui dit pour tel IP et pour l'une de ses deux Mac ne pas envoyer d'email

n°836854
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 17:10:53  profilanswer
 

Tu va voir Hurric, le C c'est merveilleux par rapport à Java :lol:

n°836870
Hurric'
Posté le 30-08-2004 à 17:16:56  profilanswer
 

ok ben je te laisse le C je garde Java...mais pour le transtypage c bien comme ca : intoa(a)?

n°836883
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 17:23:56  profilanswer
 

précision : itoa(...) n'est pas une fonction standard C. Vérifier qu'elle est bien dispo avec ton compilo.
 
exemple d'utilisation :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.   char str[50]; /* prévoir suffisamment grand */
  5.  
  6.   printf("15 en binaire est %s\n", itoa(15, str, 2));
  7.   printf("15 en octal est %s\n"  , itoa(15, str, 8));
  8.   printf("15 en décimal est %s\n", itoa(15, str, 10));
  9.   printf("15 en hexa est %s\n"   , itoa(15, str, 16));
  10.   return 0;
  11. }


 
voilà


Message édité par pains-aux-raisins le 30-08-2004 à 17:24:59
n°836893
Taz
bisounours-codeur
Posté le 30-08-2004 à 17:29:43  profilanswer
 

itoa n'existe pas partout

mood
Publicité
Posté le 30-08-2004 à 17:29:43  profilanswer
 

n°836918
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 17:48:47  profilanswer
 

dans sa version simple (décimal positif) voici un code simplifié (désoptimisé) :

Code :
  1. char* itoa(int num, char* str) {
  2.    int i, n1, n, nlen;
  3.    /*--- Combien de caractères il faut ? ---*/
  4.    nlen = 1; /* nombre de cars nécessaires */
  5.    n = 10;   /* base 10                    */
  6.    while (num / n != 0) {
  7.       nlen = nlen + 1;
  8.       n = n * 10;
  9.    }
  10.    /*--- Ici on examine les chiffres un par un ---*/
  11.    n1 = num;
  12.    i = 0;
  13.    do {
  14.       n = n1 % 10;
  15.       n1 = n1 / 10;
  16.       str[nlen - i - 1] = '0' + n;
  17.       i = i + 1;
  18.    } while (n1 != 0);
  19.    str[i] = '\0';
  20.    return str;
  21. }


 
cette fonction pourra être appelée en déclarant un buffer (2e parametre) qui recevra la représentation caractere du nombre.
 

Code :
  1. #include <stdio.h>
  2. int main() {
  3.    char buffer[50];
  4.    itoa(15, buffer);
  5.    printf("15 = %s, c'est vrai !\n", buffer);
  6.    return 0;
  7. }


 
En espérant que je me suis pas gourré dans ce code... :D


Message édité par pains-aux-raisins le 30-08-2004 à 17:49:33
n°836945
Taz
bisounours-codeur
Posté le 30-08-2004 à 18:28:44  profilanswer
 

génial c'est vachement sécure, et uis au moins, t'as pas l'impression de réinventer sprintf et le bien meilleurs snprintf
 

Code :
  1. snprintf(buffer, sizeof buffer, "%d", i);

n°837000
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 19:26:30  profilanswer
 

+1 j'y ai pensé en rentrant... :D

n°837002
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 19:27:06  profilanswer
 

Le truc c'est qui m'a troublé avec sa fonction itoa...

n°837004
pains-aux-​raisins
Fatal error
Posté le 30-08-2004 à 19:28:35  profilanswer
 

surtout qu'apparament il dit que son prog utilise déjà cette fonction... mais bon, question portabilité, on est d'accord, c'est zéro..

n°838024
Hurric'
Posté le 31-08-2004 à 16:28:38  profilanswer
 

c'était pas itoa mais intoa... ce que c'est je sais pas je connasi pas le C...mais j'ai réussi à me débrouiller en utilisant un transtypage forcé...en tout cas ca marche ...merci pour vos réponses ;)

n°838062
Hurric'
Posté le 31-08-2004 à 16:47:13  profilanswer
 

dsl c de ma faute intoa est une classe du logiciel     :whistle:


Message édité par Hurric' le 31-08-2004 à 16:48:24
n°838076
pains-aux-​raisins
Fatal error
Posté le 31-08-2004 à 16:56:04  profilanswer
 

;)

n°838908
Hurric'
Posté le 01-09-2004 à 17:12:45  profilanswer
 

bon ca marche bien mon responsable recoit bien les mails mais pas ceux de la machine qui pose probleme et il est ainsi tout content mais il s'est dit: "tiens !!! il faudrait que nous soyons deux à recevoir des mails...Comme ca si l'un d'entre nous n'est pas là ...l'autre pourra tjs surveiller..."
bon ben il a pas tort mon responsable...c'est important que cela soit toujours surveiller mais moi, j'ai bien essayé de  modifier le programme mais il y a la commande execl qui apparemment ne veut pas etre placé deux fois à la suite...mon ami google m'a dit que cette fonction s'occupe des processus...mais je sais pas j'y arrive pas..programmer de base d'accord même si c'est en C mais programmer avec les processus non je peux vraiment pas... voila une partie du code : verriez vous une solution à mon probleme?

Citation :

if ( strcmp("10.1.3.5",intoa(a))==0 && ( strcmp("0:5:12:b7:47:51",(char)e1)==0  ||
  strcmp("0:5:12:b7:47:52",(char)e1)==0) )
  return;
 else {  
   execl(sendmail, "sendmail1", "-odi", watcher, NULL);
   syslog(LOG_ERR, "execl: %s: %m", sendmail);  
   
 /*watcher pointe vers l'adresse mail enfin je crois pasque en C c'est bizzare les pointeurs...je pensais mettre un watcher1 et un watcher*/
   
   
   }
 exit(1);


Message édité par Hurric' le 01-09-2004 à 17:16:18
n°838929
Taz
bisounours-codeur
Posté le 01-09-2004 à 17:19:38  profilanswer
 

(char)e1
 
à ouais ça marche terrible
 
 
engager quelqu'un, de toutes évidences tu en as rien à foutre du C, tu cherche juste à ce que quelqu'un fasse ton travail. c'est hors charte

n°838931
pains-aux-​raisins
Fatal error
Posté le 01-09-2004 à 17:22:01  profilanswer
 

Taz a écrit :

(char)e1
 
à ouais ça marche terrible
 
 
engager quelqu'un, de toutes évidences tu en as rien à foutre du C, tu cherche juste à ce que quelqu'un fasse ton travail. c'est hors charte


Du code pareil, j'ai mal au coeur.  :sweat:

n°838961
Hurric'
Posté le 01-09-2004 à 17:40:08  profilanswer
 

Taz a écrit :

(char)e1
 
à ouais ça marche terrible
 
 
engager quelqu'un, de toutes évidences tu en as rien à foutre du C, tu cherche juste à ce que quelqu'un fasse ton travail. c'est hors charte


non je ne cherche pas quelqu'un pour faire mon travail...je fais parti de quelque forums et je sais que les personnes du forums ne sont là que pour répondre si ils le souhaitent à des problèmes donnés...ce que je fait quand j'en ai le temps... Or là le temps c'est ce qui me manque car je suis seulement etudiant engagé en intérim' en tant qu'assistant informaticien pendant l'été et jusqu'à vendredi...
j'ai passé toute mon aprés midi dessus et si on compte avec hier... ce n'est pas en deux jours que je vais pouvoir apprendre le C...ce qui m'intéresserait tout de même mais pas possible maintenant...si j'ai mis du code c'était que vous ayez un visuel de la partie du logiciel que je suis en train de modifier (arpwatch soit dit en passant et aucune documentation à part le man n'est dispo sur le net) et pour me lancer sur quelques pistes..je sais que faire du transtypage de la sorte n'était pas le meilleur moyen mais manque de temps et de connaissances dans ce langage je n'ai pu faire mieux... VOilà donc si vous ne voulez pas m'aider (j'ai bien dit aider et pas faire car cela ne m'apporterait rien)...ben tant pis, j'ai d'autres problèmes en plus de celui là à résoudre mais j'aurais quand même aimer finir
Hurric'

n°838971
Taz
bisounours-codeur
Posté le 01-09-2004 à 17:46:06  profilanswer
 

débrouilles toi tout seul. ça n'a rien à voir avec la volonté. t'es hors charte. tu veux qu'on fasse le travail à ta place, tu t'en fiches bien de savoir ce qui ne va pas. lis la charte, et reviens quand tu l'auras assimilée

n°839000
Hurric'
Posté le 01-09-2004 à 18:16:06  profilanswer
 

extrait charte:

Citation :

[0C] On ne fait pas le boulot à votre place.
 
    * Les demandes du style "vous pouvez faire un programme faisant [...] pour moi ?" sont assez mal vues et n'obtiennent que très rarement de réponses.
    * Les offres d'emploi et recrutements (même non rémunérés) ont plutôt leur place sur Emploi & Études.  
 
 
 
[0D] De la même manière, les demandes de résolutions d'exercices ne seront pas acceptées
 
    * Du moins, s'il s'agit d'une demande de solution toute faite, sans effort manifeste du côté du demandeur. Cette décision a été prise étant donné le nombre croissant de ce type de demandes lors des périodes de reprise des cours ou d'approche des périodes d'examens.
    * Merci aux membres du forum de ne pas donner des résolutions d'exercice lorsqu'il est clair que le demandeur n'a rien fait de son côté


 
 
 
 
 

Hurric' a écrit :

non je ne cherche pas quelqu'un pour faire mon travail...
[...]
 VOilà donc si vous ne voulez pas m'aider (j'ai bien dit aider et pas faire car cela ne m'apporterait rien)...ben tant pis, j'ai d'autres problèmes en plus de celui là à résoudre mais j'aurais quand même aimer finir
Hurric'


 
donc je pensais avoir été clair sur ce que je voulais...mais bon, j'aurais été à votre place j'aurais dis à la personne oui les processus c'est dure/ pas dure à programmer... ou il faut imperativement que ton processus soit finis avant d'en faire una autre ou meme regarde sur ce lien http://forum.hardware.fr/forum2.ph [...] 910&cat=10 ou tel lien qui traite de ce sujet...oui je sais j'ai pas lu toute la charte donc je n'ai pas vu le referencement des liens de forum...je ne le connais pas trop, il est tres grand, beaucoup de monde et de topic ... donc je vais regarder les liens référencés... je vais rechercher dans google car les premieres explications que j'avais trouvées ne m'ont pas été d'un grand secours et donc y passer de longues heures(ou moins j'espère avec un peu de chance) ce que j'aurais fait, et que j'ai fait souvent tout cet été ce qui m'as permis d'apprendre beaucoup de <edit>choses(et pas chances), si il me restait pas aussi peu de temps, c'est pour cela que je souhaitais obtenir un aiguillage sur mes recherches...Donc je vais passer les 3 derniers jours qu'il me reste à chercher et tester et je viendrais vous donner ici le résultat de mes recherches (enfin si j'ai le temps!!!)  
 
Hurric'
au fait j'ai quand meme voulut chercher sur le forum  avant de poster mais cette fonction est inactive pour le moment


Message édité par Hurric' le 02-09-2004 à 15:55:11
n°840157
Hurric'
Posté le 02-09-2004 à 16:22:24  profilanswer
 

bonjour,  
 
j'ai galéré tout ce matin en me renseignant sur la fonction execl...
(attention les yeux, il va y avoir du code)

Citation :

execl(sendmail, "sendmail", "-odi", watcher, NULL);


avec watcher pointeur sur une adresse e-mail.
Une idée saugrenue me germait dans la tête depuis hier soir: "et si au lieu d'executer deux fois sendmail...je lui envoyais deux adresses mails? ...non ca doit pas être possible..." mais ce matin après avoir testé différentes méthodes sans succès, j'ai essayé tout de même de remplacer watcher par deux adresses emails.
(attention les yeux, il va re y avoir du code)

Citation :

execl(sendmail, "sendmail", "-odi", "adressemail1 adressemail2", NULL);


et vous savez quoi? ca a marché!!!
Les deux adresses mails recoivent bien les mails envoyés par arpwatch...
 
 
Conclusion:
Que  m'a apporté cette mini-aventure dans le monde fabuleux de C?
déjà , je me suis aperçu qu'il n'est pas si compliqué cela, en particulier, les pointeurs qui d'après ce que j'avais entendu dire etait  l'horreur... je me suis rendu compte que c'est pas pasque je programme sur un autre langage que les causes d'erreur peuvent être lié à mon incompréhension de ce langage mais à une simple erreur d'algo...
 
 
Voilà, je remerci pains-aux-raisins pour son aide et Taz malgrè son acharnement à voir en moi un ...hum...branleur/profiteur/boulay....
 
 :hello:


Message édité par Hurric' le 02-09-2004 à 16:56:09
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Condition et strcmp

 

Sujets relatifs
[SQL] selection des donnees qui ne remplissent pas une conditionverifier une condition en javascript
[shell linux] condition boucle forcondition
probleme de conditioncondition si alors sinon en Business Objects
Modifier ou créer une condition sur un report BO à partir d'access[EXCEL][VBA] condition sautée ?
Cree un fichier .BAT avec une conditionUn boucle avec une condition...
Plus de sujets relatifs à : Condition et strcmp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR