Utilisateur anonyme
-
18 janv. 2006 à 16:33
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 2011
-
19 janv. 2006 à 22:38
Bonjour à tous,
Alors je vous énonce mon petit problème:
Voila je suis étudiant en bts informatique et nous devons réaliser un programme permettant de définir à quelle classe appartient une adresse ip en langage C++. Pour cela nous devons réaliser des test pour vérifier que les chiffres saisies ne depassent pas 255 mais mon problème est que je voudrai saisir l'adresse en question sous la forme ***.***.***.*** mais je ne sais pas la maniere a adopter en c++ équivalante à
scanf("%d.%d.%d.%d", &a,&b,&c,&d); ce que j'avais pensé c'ete faire cin>>et le ranger dans un tableau mais apres je ne vois pas comment traiter les informations car chaque chiffre va se trouver dans une case de tableau.... Il ne doit pas etre possible de faire un cin>>a>>".">>b>>"." etc... je ne vois pas comment m'y prendre.
Si quelqu'un a une information et pourrai m'aider a ce sujet.
Je vous remercie d'avance.
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 18 janv. 2006 à 19:41
pour la vérification d'ip , j'avai fait le programme en VB6 (et oui j'était un vbtiste me frappé pas :p ).
Voici le code cela pourra p-e t'aider. Il est très simple a comprendre.
Ne te préocupe pas des label et autre, juste sur la vérification . Je
t'ai mit d'ailleur juste la procédure qui calcule les classes.
code :
Private Sub Command1_Click()
Dim no_ip As Integer
no_ip = Val(Textip1.Text)
If Textip1.Text "" Then Textip1.Text 0
If Textip2.Text "" Then Textip2.Text 0
If Textip3.Text "" Then Textip3.Text 0
If Textip4.Text "" Then Textip4.Text 0
If no_ip > 0 And Val(Textip2.Text) = 240
Then
'Ip de classe E
Labelipclass.Caption = "E"
Labelmasqsr.Caption = "255.255.255.255"
Labelpriv.Caption = "oui (RESERVE)"
Labelpriv.ForeColor = &HFF&
End If
If no_ip 255 Or Val(Textip2.Text) 255 Or
Val(Textip3.Text) 255 Or Val(Textip4.Text) 255 Then 'Broadcast
Merci beaucoup mais j'arrive pas a tout comprendre il me semble en C++ qu'il y aurait enormement de test a faire... je suis en train de m'embrouiller ....
^ Cest la vérification pour voir si une adresse ip est valide .si no_ip
(c'est le premier nombre de l'adresse ip) est plus grand que 0 ET si le
2ième nombre de l'adresse ip est plus petit ou égale a 255 ET si le
3ième nombre est plus petit ou égale a 255 ET si le 4ième nombre est
plus petit ou égale a 255.
Oui c'est vrai sa na pas l'air si compliqué que sa mais je t'avouerai que la je suis totalement perdu depuis que j'ai vu que pour les nombre inferieur a 3 chiffres sa ne marcher pas que sa ecrivai quelque chose de bizar bah je ne m'y retrouve plus
Rafou.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Bon je vous remercie mais la j'arrive plus a faire quoique ce soit je ne m'y retrouve plus je comprend pas comment isoler les parties des nombre en fonction du nombre de chiffre et a cause des points je suis un debutant c pe etre pour sa que j'ai trop du mal.....
deck_bsd
Messages postés1243Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 3 août 20162 19 janv. 2006 à 17:25
Désolé pour hier, je devait partir.
Voila un code en C (j'ai mis en C++ de se que je me souvient a côté en commentaire).
Il te permet d'isoler le 1er nombre de l'adresse ip, étant donné que
c'est le plus important pour déterminer le type d'adresse Ip.
Facilement adaptable.
int main(void){
char szTabIP[15];
int iNo1[1];
printf("\n Entrer l'adresse ip :"); // cout<<"entre l'adresse IP";
scanf("%s",szTabIP);
// cin >>szTabIP;
/* Affiche l'adresse rentrée */
printf("\n IP : %s"); //cout <<"IP :"<<szTabIP;
getch();
/* Transforme caractères en nombre pour isoler le 1er nombre d el'ip */
Merci pour cette aide sa ma beaucoup aider j'ai fini par reussir a faire ce que je voulais voila je vous met le source dites moi ce que vous en pencez?!
Petite parenthèse rrk275 j'arrive toujours pas a comprendre a quoi correspond le 6*4+1=25 jvois pas concretement a quoi sa correspond?!
voici le code:
short test(short *);
void classip(short *);
void main()
{
short ip[4],ipv;
char c;
cout<<"Saisissez votre adresse IP sous la forme(***.***.***.***): ";
cin>>ip[0]>>c>>ip[1]>>c>>ip[2]>>c>>ip[3];
cin.ignore();
ipv=test(ip);
cout<<"\nIPv: "<255)||(ip[0]<0))
{
ipv=0;
}
else if(ip[1]>255||ip[1]<0)
{
ipv=0;
}
else if(ip[2]>255||ip[2]<0)
{
ipv=0;
}
else if(ip[3]>255||ip[3]<0)
{
ipv=0;
}
if(ipv==1)
{
cout<<"\nAdresse IP saisi: ";
for(int i=0;i<4;i++)
{
cout<<*(ip+i)<<".";
}
cout<<" est valide!"<<endl;
}
else
{
cout<<"\nAdresse IP saisi: ";
for(int i=0;i<4;i++)
{
cout<<*(ip+i)<<".";
}
cout<<" est invalide!"<<endl;
}
return ipv;
}
void classip(short *ip)
{
int mask=0x80,v;
v=ip[0]&mask;
if(v==0) cout<<"\nL'adresse IP saisi est de classe A!"<<endl;
else
{
mask=mask>>1;
v=ip[0]&mask;
if(v==0) cout<<"\nL'adresse IP saisi est de classe B!"<<endl;
else
{
mask=mask>>1;
v=ip[0]&mask;
if(v==0) cout<<"\nL'adresse IP saisi est de classe C!"<<endl;
else
{
mask=mask>>1;
v=ip[0]&mask;
if(v==0) cout<<"\nL'adresse IP saisi est de classe D!"<<endl;
else
{
//mask=mask>>1;
//v=ip[0]&mask;
/*if(v==0)*/ cout<<"\nL'adresse IP saisi est de classe E!"<<endl;
}
}
}
}
}
Désolé pour un si long code ma prof ma dit que c'ete une des manieres "simple" de faire apres j'essayerai d'autre chose de mon coté
Gendal67
Messages postés627Date d'inscriptionmercredi 16 juin 2004StatutMembreDernière intervention24 juillet 20112 19 janv. 2006 à 22:37
Bonsoir, 6*4+1=25 correspond à la taille de szIP pour rentrer une IP...regarde :
char szIP "155.142.100.215.325.156" // IP v6 24 caractère + le caractère de fin de chaine '\0', ça fait bien 25