Petit probleme en c++

Utilisateur anonyme - 18 janv. 2006 à 16:33
 Gendal67 - 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.


Rafou.

33 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 janv. 2006 à 17:09
Pourquoi est ce un problème que les chiffres ce trouve dans un tableau
?? si je te comprent bien ton tableau contiendra pour exemple ceci:



255.(heu ça ne feras pas un . mais je connai pas sont code par coeur)255.255.255.255 (broadcast, ip de classe E :) ).



Il te suffira alors de parcours le tableau 4 à 4 (tous en ignorant le
point donc 3-1). Avec une boucle for le tour est joué.Bon c'est vrai
que cela serai moin pratique , mais tout a fait faisable.



Maintenant pour le format en C++ je saurai pas t'aider.



peut etre : cin>>a>>'.'>>b>>'.'>>c>>'.'>d mais je suis pas sur.
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
18 janv. 2006 à 17:13
un chiffre ne depasse 255 qu'en base 256 ... ou plus

as tu essayé (solution pertinente mais un peu plus longue ...) a faire

char ip[25];//ip a 6*4 + 1 au max (pour le final !!)

scanf("%s",ip);

.. et puis tu devrai y arriver..
0
Utilisateur anonyme
18 janv. 2006 à 17:14
Mais la je viens de faire un tableau je rentre bien l'adresse ip dedans qd je l'affiche j'obtiens bien ce que j'ai tapé! Mais ce qui me gène c'est pour isoler les chiffres je suis tout a fait d'accord il faut faire une boucle for mais je vois pas comment le mettre dans des variables pour retraiter c'est information.

Je vous pries de bien vouloir m'excuser je suis débutant en programation


Rafou.
0
Utilisateur anonyme
18 janv. 2006 à 17:17
De même pour le parcours 4 à 4 je comprend pas trop


Rafou.
0

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

Posez votre question
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
18 janv. 2006 à 17:25
bah tu parcours et tu teste le nombre avec atoi ..
int test = 1;
for(int i=3;i<25:i+=4)ip[i]='\0';//on trasforme chaque point en fin de chaine..
for(int i=0;i<25:i+=4)if(atoi(ip[i])>255||atoi(ip[i])<0)test=0;
if(test){
//ip valide !!
}
else
{
//ip invlaide
}
0
Utilisateur anonyme
18 janv. 2006 à 17:32
Je vous prie de m'excuser pour les posts repetitif precedent je n'ai pas fait expres.

Merci a vous deux, et je voulais savoir rrk275 pk tu fais un for avec la valeur 25 ya pas 25 caractere dans le tableau yen a 16 , peut etre que je me trompe et je comprend pas ton test=0, si tu pouvais m'expliquer pourquoi. je te prie de m'excuser je suis un peu fatigué.

En tout cas je vous remercie beaucoup pour votre aide.


Rafou.
0
cs_Arnotic Messages postés 933 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 9 janvier 2012
18 janv. 2006 à 17:33
char szIP[] = "255.255.255.255";
long i1, i2, i3, i4;


*(szIP+3) 0; *(szIP+7) 0; *(szIP+11) = 0;
i1 = atol(szIP);
i2 = atol(szIP+4);
i3 = atol(szIP+8);
i4 = atol(szIP+12);

aussi

@+
Arnotic,
Admin CS,
http://dev.winsysdev.com
MVP Visual C++
0
Utilisateur anonyme
18 janv. 2006 à 17:39
La fonction atoi(ip[i]) sa ne marche po sa genere une erreur


Rafou.
0
Utilisateur anonyme
18 janv. 2006 à 17:50
rrk275 j'ai trouver la solution pour le atoi(ip[i]) qui genere une erreur, la solution c'est de mettre atoi(ip+i) au lieu de atoi(ip[i]). Grace a l'exemple de Arnotic.

Je vous remercie tous pour votre aide! Merci beaucoup!

Rafou.
0
Utilisateur anonyme
18 janv. 2006 à 17:56
J'aurais une derniere question a quoi sert explicitement de remplacer les point contenu dans le tableau par '\0' cela permet d'utiliser la fonction atoi ?!
Si c'est ce que je comprend, si l'on ne remplacé pas les "." par "\0" il serait impossible d'utiliser atoi pour les 4 "paquets" de chiffres car si l'on utilise atoi comme sa renvoi seulement la valeur de gauche situé avant le premier "." c'est bien cela?


Rafou.
0
Utilisateur anonyme
18 janv. 2006 à 18:15
Merci a vous tous j'ai reussi a faire ceci mais il me reste un dernier detail a faire c la repartition de classe comment je peux faire dans un if pour dire que la classe A va de 1.0.0.0 a 127.0.0.0 j'arrive pas a me schematiser sa?! Es possible?


Rafou.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 janv. 2006 à 18:32
"J'aurais une derniere question a quoi sert explicitement de remplacer
les point contenu dans le tableau par '\0' cela permet d'utiliser la
fonction atoi ?!"



Je me pose la même question :)
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
18 janv. 2006 à 18:35
bah
atoi ne connait pas la taille il cherche donc le caractere de fin de chaine ...
(j'espere que c'est pas inutile parce qu'il parait que je fais plein de messages inutiles ... )
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 janv. 2006 à 18:37
rkk275 : "un chiffre ne depasse 255 qu'en base 256 ... ou
plus" Pourquoi parle tu de base? le 255 est la limite d'un nombre dans
une adresse ip (je dirai mm 254 car 255 est utilisé pour le
broadcast et aussi pour le masque de sous réseaux), tu peu pas mettre
plus haut. Donc c'est pour ça que je comprend pas ce que tu a dit.
0
Utilisateur anonyme
18 janv. 2006 à 18:37
Je viens d'essayer sans mettre la boucle for ki remplace le "." en "\0" et le programme marche encore donc je sais pas trop mais sans doute que c'est utile?!


Rafou.
0
rrk275 Messages postés 540 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 1 octobre 2007 2
18 janv. 2006 à 18:47
nan je parlais de base uniquement parce qu'il a employé le mot chiffre a la place de nombre (rien de tres important mais dans certaines situations ca porte a confusion...)

"rrk275 j'ai trouver la solution pour le atoi(ip[i]) qui genere une erreur, la solution c'est de mettre atoi(ip+i) au lieu de atoi(ip[i]). "
??
nan pas tt a fait atoi demande une const char * et donc il fallait mettre atoi(&ip[i])

25 pourquoi 25 parce que de nouvelle IP sont a 6 nombres.. ca s'appelle ip v6 .. et comme je l'ai deja dit 6*4+1 = 25
0
Utilisateur anonyme
18 janv. 2006 à 18:58
Petite parenthese si l'on rentre autre chose que "255.255.255.255" par exemple "0.0.0.0" d'incrementer le atoi(ip+4) par exemple bah sa foire car le "0" ne prend qu'une case dans lem tableau et "255" prend 3 cases c'est pas contradictoire?! ou soit les valeur sont interpreter en binaire?!


Rafou.
0
Utilisateur anonyme
18 janv. 2006 à 19:01
C'est bien ce que je disais si l'on tape "0.0.0.256" sa me dit ip valide


Rafou.
0
Utilisateur anonyme
18 janv. 2006 à 19:14
pour toute les valeurs inferieur à 100 donc ne comportant que 2 chiffres sa ne marche pas!!! Il faudrai sans doute tenir compte du nombre de chiffre entre chaque point je pense?! mais comment faire tel est la question?!


Rafou.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
18 janv. 2006 à 19:32
pour info une adresse ip peut contenir dans 0 ex : 127.0.0.0
(localhost,Classe B mais ip réservé ;) ). Bon il est vrai que si
l'adresse commence par 0 cela est faut.



il suffit alors de voir si le premier nombre est différent de 0.
0
Rejoignez-nous