Lire une ip(conversion d'ip (char en int)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 358 fois - Téléchargée 33 fois

Contenu du snippet

Ce ptit programme permet de lire l'adresse ip que l'utilisateur entre,et de la convertir en 4 nombres entiers(ip1,ip2,ip3,ip4).A la fin du programme,il vérifie que l'ip entrée sois bien correcte(cad,entre 0 et 255)
je remercie au passage toutes les personnes m'ayant aidé à trouver la solution! ;)
j'espère que cette source est assez claire et surtout qu'elle aidera les débutants!! ;)

Source / Exemple :


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

int main()
{
	char ip[16],temp;
	int longueur,n,ip1=0,ip2=0,ip3=0,ip4=0,i=0;

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

	cout << longueur<<endl;//ensuite on l'affiche!

for (n=0;n<longueur;n++)/*on teste les différents caracteres de l'ip pour  connaitre leurs valeurs entieres*/
{temp=ip[n];
	cout<<"lecture 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 (=un chiffre)on fait des operations avec

}

//ensuite on affiche les valeurs
cout <<"voici les 4 chiffres de l'ip:\n"<<
ip1<<"\t"<<ip2<<"\t"<<ip3<<"\t"<<ip4<<"\t";

/*puis on teste,normalement on devrais d'abord tester et ensuite 
afficher les valeurs,mais bon,c juste un début,pour voir si le 
prog fonctionne*/

if (ip1>255 || ip2>255 ||ip3>255|| ip4>255)
cout <<"l'ip n'est pas valide car :\n";
if (ip1>255)
cout<<"ip1 est superieur a la valeur normale\n";
if (ip2>255)
cout <<"ip2 est superieur a la valeur normale\n";
if (ip3>255)
cout <<"ip3 est superieur a la valeur normale\n";
if (ip4>255)
cout <<"ip4 est superieur a la valeur normale \n";

 cout<<"fin du progz ;)\n";
getchar();	
return 0;
}

Conclusion :


Ce petit programme n'est pas optimisé,(et oui,c fait pour que tout le monde comprenne rapidement)
je publierai peut-etre une source ou le code sera un peu + optimisé!(par contre,je ne sais pas quand je trouverai le temps!)
en tout cas,j'aimerai remercier tous ceux qui m'ont aidé(code sources et ses membres aussi ;)
j'espère que cette source va etre utile aux newbies!
en tout cas,faites moi part de vos remarques concernant ma source!
merci d'avance ;)

A voir également

Ajouter un commentaire

Commentaires

chris5874
Messages postés
50
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
26 janvier 2007
-
effectivement,ta solution serait plus simple!
seulement comme je suis débutant,je ne suis pas encore vraiment familier avec les tableaux,c'est en partie pour cela que je ne les ai que rarement utilisés(voire pas du tout)
en fait,g juste quelques rares notions du comment faire un tableau,donc g préféré une méthode + longue et barbante,mais en etant sur que ça marche!
merci de m'avoir conseillé,tes conseils sont toujours très utiles ;)
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
non c'est
ip[i]=(ip[i+1]*10)+0;
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
pouquoi tu ne fais pas un tableau de taille 4 representer ip1 a ip4
Comme ca au lieu de tes switch :
**************************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;
}
****************************
tu fais :
****************************
ip[i-1]=(ip[i]*10)+0;
**************************
chris5874
Messages postés
50
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
26 janvier 2007
-
bon ptite explication pour ceux qui n'arrievtn pas à suivre:
tout d'abord l'utilisateur entre son ip,
celle-ci est d'office en char!
ensuite avec une boucle for,on lis chacun des caracteres de la chaine,
et on fait des calculs avec
i est une variable qui détermine à quel entier on doit rentrer la valeur(0 pour ip1,1pour ip2,2pour ip3,3 pour ip4)
ip1,ip2,ip3,ip4 étant les entiers que l'on obtient à la fin!
donc on calcule de la manière suivante=>on lis le caractere,
suivant la valeur de i,on multiplie un des entiers finaux(ip1...4)par 10 et on ajoute la valeur lue actuellement!
temp étant une variable ou le caractere lu est mis dedans TEMPorairement car à chaque tour de boucle,temp contient le caractere suivant de l'ip!
à la fin du prog,on affiche les différents entiers lus dans l'ip,
et puis on les teste pour savoir si l'ip est valide ou non!
j'espère que c un peu + clair comme ça!
dsl de n'avoir pas expliqué un peu + !(je pensais que le prog parle de lui meme,mais apparemment c pas le cas)
donc,s'il y a d'autres commentaires,n'hésitez pas,faites m'en part! ;)
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
"Ce petit programme n'est pas optimisé,(et oui,c fait pour que tout le monde comprenne rapidement)"

Meme cette version non-optimisee, je n'y comprend RIEN

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.