Tite aide svp!!

chris5874 Messages postés 50 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 26 janvier 2007 - 6 août 2003 à 18:50
KeViNprat Messages postés 1 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 4 septembre 2004 - 4 sept. 2004 à 16:11
salut tout le monde!
j'aurais besoinde votre aide svp!
je suis en train de développer un programme qui va lister toutes les ip contenues entre les ip de début et de fin(entrées par l'utilisateur)
vous trouverez ci dessous le source du projet!
merci d'avance pour votre aide!

ps:le prog ne liste pas correctement les ip,notamment qd on passe de 0.0.255.255 à 0.1.0.0(bug car après 0.0.255.255,le prog passe directement à 0.1.1.0)
encore une fois,merci d'avance pour votre aide!

#include
#include <string.h>
#include <stdio.h>

int main()
{
char ip[16],temp,temp1,ipfin[16];
int longueur,longueurfin,n,n1,ip1=0,ip2=0,ip3=0,ip4=0,i=0,j=0,ip10=0,ip20=0,ip30=0,ip40=0;

cout <<"entrez une ip de debut au format a.b.c.d\n";
cin >> ip;
cout <<"cette ip est une chaine de caractères de longeur " ;
longueur = strlen (ip);//fonction permettant de retourner la longeur de la chaine de caractere!

cout << longueur<<endl;//ensuite on l'affiche!
cout <<"entrez une ip de fin au format a.b.c.d\n";
cin>>ipfin;

cout <<"cette ip est une chaine de caractères de longeur " ;
longueurfin = strlen (ipfin);//fonction permettant de retourner la longeur de la chaine de caractere!
cout << longueurfin<<endl;//ensuite on l'affiche!

for (n=0;n<longueur;n++)
{temp=ip[n];
cout<<"extraction caractere" <<n<<":"<<temp<<endl;
if (temp == (char)48)
{cout <<"le programme reconnait la valeur 0 dans temp\n";
switch (i)
{case 0:ip1=(ip1*10)+0;
break;
case 1:ip2=(ip2*10)+0;
break;
case 2:ip3=(ip3*10)+0;
break;
case 3:ip4=(ip4*10)+0;
break;
}
}
else if (temp == (char)49)
{cout <<"le programme reconait la valeur 1 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+1;
break;
case 1:ip2=(ip2*10)+1;
break;
case 2:ip3=(ip3*10)+1;
break;
case 3:ip4=(ip4*10)+1;
break;
}
}
else if (temp == (char)50)
{cout <<"le programme reconait la valeur 2 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+2;
break;
case 1:ip2=(ip2*10)+2;
break;
case 2:ip3=(ip3*10)+2;
break;
case 3:ip4=(ip4*10)+2;
break;
}
}
else if (temp == (char)51)
{cout <<"le programme reconait la valeur 3 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+3;
break;
case 1:ip2=(ip2*10)+3;
break;
case 2:ip3=(ip3*10)+3;
break;
case 3:ip4=(ip4*10)+3;
break;
}
}
else if (temp == (char)52)
{cout <<"le programme reconait la valeur 4 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+4;
break;
case 1:ip2=(ip2*10)+4;
break;
case 2:ip3=(ip3*10)+4;
break;
case 3:ip4=(ip4*10)+4;
break;
}
}
else if (temp == (char)53)
{cout <<"le programme reconait la valeur 5 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+5;
break;
case 1:ip2=(ip2*10)+5;
break;
case 2:ip3=(ip3*10)+5;
break;
case 3:ip4=(ip4*10)+5;
break;
}
}
else if (temp == (char)54)
{cout <<"le programme reconait la valeur 6 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+6;
break;
case 1:ip2=(ip2*10)+6;
break;
case 2:ip3=(ip3*10)+6;
break;
case 3:ip4=(ip4*10)+6;
break;
}
}
else if (temp == (char)55)
{cout <<"le programme reconait la valeur 7 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+7;
break;
case 1:ip2=(ip2*10)+7;
break;
case 2:ip3=(ip3*10)+7;
break;
case 3:ip4=(ip4*10)+7;
break;
}
}
else if (temp == (char)56)
{cout <<"le programme reconait la valeur 8 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+8;
break;
case 1:ip2=(ip2*10)+8;
break;
case 2:ip3=(ip3*10)+8;
break;
case 3:ip4=(ip4*10)+8;
break;
}
}
else if (temp == (char)57)
{cout <<"le programme reconait la valeur 9 dans temp \n";
switch (i)
{case 0:ip1=(ip1*10)+9;
break;
case 1:ip2=(ip2*10)+9;
break;
case 2:ip3=(ip3*10)+9;
break;
case 3:ip4=(ip4*10)+9;
break;
}
}
else if (temp == (char)46)
{cout <<"le programme reconait la valeur . dans temp \n";
i++;
}
else if (temp == (char)42)
cout <<"le programme reconait la valeur * dans temp \n";

//test des caracteres,est-ce que c un . ou n'importe quel chiffre?
//si oui on fait des operations avec

}

cout<<endl;

cout <<endl;

for (n1=0;n1<longueurfin;n1++)
{temp1=ipfin[n1];
cout<<"extraction caractere" <<n1<<":"<<temp1<<endl;
if (temp1 == (char)48)
{cout <<"le programme reconnait la valeur 0 dans temp\n";
switch (j)
{case 0:ip10=(ip10*10)+0;
break;
case 1:ip20=(ip20*10)+0;
break;
case 2:ip30=(ip30*10)+0;
break;
case 3:ip40=(ip40*10)+0;
break;
}
}
else if (temp1 == (char)49)
{cout <<"le programme reconait la valeur 1 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+1;
break;
case 1:ip20=(ip20*10)+1;
break;
case 2:ip30=(ip30*10)+1;
break;
case 3:ip40=(ip40*10)+1;
break;
}
}
else if (temp1 == (char)50)
{cout <<"le programme reconait la valeur 2 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+2;
break;
case 1:ip20=(ip20*10)+2;
break;
case 2:ip30=(ip30*10)+2;
break;
case 3:ip40=(ip40*10)+2;
break;
}
}
else if (temp1 == (char)51)
{cout <<"le programme reconait la valeur 3 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+3;
break;
case 1:ip20=(ip20*10)+3;
break;
case 2:ip30=(ip30*10)+3;
break;
case 3:ip40=(ip40*10)+3;
break;
}
}
else if (temp1 == (char)52)
{cout <<"le programme reconait la valeur 4 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+4;
break;
case 1:ip20=(ip20*10)+4;
break;
case 2:ip30=(ip30*10)+4;
break;
case 3:ip40=(ip40*10)+4;
break;
}
}
else if (temp1 == (char)53)
{cout <<"le programme reconait la valeur 5 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+5;
break;
case 1:ip20=(ip20*10)+5;
break;
case 2:ip30=(ip30*10)+5;
break;
case 3:ip40=(ip40*10)+5;
break;
}
}
else if (temp1 == (char)54)
{cout <<"le programme reconait la valeur 6 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+6;
break;
case 1:ip20=(ip20*10)+6;
break;
case 2:ip30=(ip30*10)+6;
break;
case 3:ip40=(ip40*10)+6;
break;
}
}
else if (temp1 == (char)55)
{cout <<"le programme reconait la valeur 7 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+7;
break;
case 1:ip20=(ip20*10)+7;
break;
case 2:ip30=(ip30*10)+7;
break;
case 3:ip40=(ip40*10)+7;
break;
}
}
else if (temp1 == (char)56)
{cout <<"le programme reconait la valeur 8 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+8;
break;
case 1:ip20=(ip20*10)+8;
break;
case 2:ip30=(ip30*10)+8;
break;
case 3:ip40=(ip40*10)+8;
break;
}
}
else if (temp1 == (char)57)
{cout <<"le programme reconait la valeur 9 dans temp \n";
switch (j)
{case 0:ip10=(ip10*10)+9;
break;
case 1:ip20=(ip20*10)+9;
break;
case 2:ip30=(ip30*10)+9;
break;
case 3:ip40=(ip40*10)+9;
break;
}
}
else if (temp1 == (char)46)
{cout <<"le programme reconait la valeur . dans temp \n";
j++;
}
else if (temp1 == (char)42)
cout <<"le programme reconait la valeur * dans temp \n";

//test des caracteres,est-ce que c un . ou n'importe quel chiffre?
//si oui on fait des operations avec

}

//ensuite on affiche les valeurs
cout <<"voici les 4 chiffres de l'ip de debut:\n"<<
ip1<<"\t"<254 && ip4>255)
{ip3=0;
ip2++;

}
if (ip2>255)
{
ip1++;
ip2=0;
}

if (ip4>255)
{

ip4=0;
++ip3;
if (ip3>255 && ip4>255)
{ip3=0;}
}

cout<<ip1<<"\t"<<ip2<<"\t"<<ip3<<"\t"<<ip4<<"\n";

}
while(ip4<ip40 || ip3<ip30 ||ip2<ip20||ip1<ip10);

cout<<"fin du progz ;)\n";

return 0;
}
A voir également:

9 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
6 août 2003 à 20:04
Salut,
Honnetement je pense que lister et manipuler des IP sous la forme de chaine de caractere du type xxx.xxx.xxx.xxx est une mauvaise idée.
Moi je convertirais plutot les IP en unsigned long, qui sont de loin bcp plus facile a manipuler.
Ton code tiendrait en 15 lignes comme ca je pense.
Si tu as besoin d'aide... :)
0
chris5874 Messages postés 50 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 26 janvier 2007
6 août 2003 à 20:17
salut!
merci de ta réponse ;)
j'aimerai bien savoir comment tu fais,
car il me semble qu'au max avec un unsigned long int,tu va jusqu'à 4 294 967 295!
je peux toujours me tromper,et si c le cas,j'admettrai mon erreur,seulement,je voudrais pouvoir manipuler l'ensemble des ip possibles,cad,de 0.0.0.0 à 255.255.255.255!
merci d'avance pour ta réponse!
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
6 août 2003 à 20:25
Salut,
Un unsigned long est un entier non signé de 4 octet
Un octet non signé va de 0 jusqua 255
Donc tu met un numero dans chaque octet et toute ton ip est dans l'insigned long.

Pour ton prog, un exemple:
Si tu as une ip 80.80.80.80, tu la convertis en unsigned long A, et si tu fais A++, et que tu la reconvertis en format lisible, ben tu aura 80.80.80.81

Donc moi je convertirais l'adresse de depart et de fin en long, et ensuite une simple boucle pour afficher toutes les IP entre ces 2 ip de depart et de fin.
0
chris5874 Messages postés 50 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 26 janvier 2007
6 août 2003 à 20:34
salut!
je vois environ ce que tu veux dire,seulement je suis un peut sceptique sur la méthode!
je comprends le coup des 4 octets,par contre,faire tenir toute l'ip dans le unsigned long,je vois encore mal,dsl
au fait,dsl aussi pour mon erreur d'avant!
penses-tu que je pourrais reexploiter ce script,et arriver à mettre l'ip sous la forme unsigned long?ou comment penses-tu que je devrais faire pour y arriver(dsl je suis newbies!)?
encore une fois,merci pour tes réponses ,c sympa de ta part de m'aider à progresser ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
6 août 2003 à 20:46
Salut,
Un unsigned long dispose de 4 fois une plage de valeur de 0 a 255. Je comprend pas pourquoi tu est septique.
0
chris5874 Messages postés 50 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 26 janvier 2007
6 août 2003 à 20:51
salut,
je ne suis pas trop sceptique sur ça,car je vois ce que tu veux dire avec les octets,ce qu'ils peuvent stocker!
je suis surtout sceptique sur la méthode à employer pour mettre l'ip dans le unsigned long int(j'oubliais de préciser,scanf est exclu car ce code sera intégré dans un prog api windows)
pourrais-tu me donner une ptite piste pour que je sache par ou débuter pour la conversion?
merci d'avance(et dsl de te faire perdre ton temps!)
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
6 août 2003 à 21:20
Salut,
je parle d'unsigned long, pas d' " unsigned long int ".
Voila une macro qui converti 4 int en 1 unsigned long:
#define IPTOLONG(a, b, c, d) ((unsigned long) (a << 24) | (b << 16) | (c << 8) | d)

Ca peut te servir a comprendre.

Pour faire un prog qui liste les IP comme tu voulais faire au debut, il faudrais faire 2 fonctions:
- une qui convertit une IP en char * en unsigned long,
- une qui converti un unsigned long en char *.
Apres le reste, ca sera du gateau.
0
chris5874 Messages postés 50 Date d'inscription mercredi 29 janvier 2003 Statut Membre Dernière intervention 26 janvier 2007
6 août 2003 à 21:32
salut!
je comprends mieux à présent!
je pense que c'était surtout le int qui m'a induit en erreur!
en tout cas,je te remercie pour ton aide,je me doute que t'as surement des choses plus importantes à faire que de répondre aux questions d'un newbie,en tout cas,je vois beaucoup mieux maintenant ce que tu voulais dire!
et je te remercie de m'avoir aidé ;)
@+++
0
KeViNprat Messages postés 1 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 4 septembre 2004
4 sept. 2004 à 16:11
bon voila jai cree un dialog de autjoin mais jai un petit problemme pour la fain je C pas comment on fait pour le
on 1:conect:if { join %chan1 }
le dialog C

dialog autojoin {
title Auto Joindre Un Salon
size -1 -1 240 130
box "Noter Les Salon A AutoJoindre",4, 5 10 290 95
button "Salon1",6, 15 30 100 20
button "Salon2",7, 115 30 100 20
button "Salon3",8, 15 50 100 20
button "Salon4",9, 115 50 100 20
button "Salon5",10, 15 70 100 20
button "Salon6",11, 115 70 100 20
button "Enregistrer",100, 30 110 60 20, flat ok
button "Annuler",101, 115 110 50 20,cancel
}
on *:dialog:autojoin:sclick:6: { set %chan1 $$?"Salon 1 Avec Le #" }
on *:dialog:autojoin:sclick:7: { set %chan2 $$?"Salon 2 Avec Le #" }
on *:dialog:autojoin:sclick:8: { set %chan3 $$?"Salon 3 Avec Le #" }
on *:dialog:autojoin:sclick:9: { set %chan4 $$?"Salon 4 Avec Le #" }
on *:dialog:autojoin:sclick:10: { set %chan5 $$?"Salon 5 Avec Le #" }
on *:dialog:autojoin:sclick:11: { set %chan6 $$?"Salon 6 Avec Le #" }
}

voila merci de votre aide ;)
0