Petit probleme en c++

Signaler
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009
-
 Gendal67 -
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

Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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.
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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..
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

De même pour le parcours 4 à 4 je comprend pas trop


Rafou.
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
}
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
933
Date d'inscription
dimanche 1 avril 2001
Statut
Modérateur
Dernière intervention
9 janvier 2012
2
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++
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

La fonction atoi(ip[i]) sa ne marche po sa genere une erreur


Rafou.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
"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 :)
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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 ... )
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
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
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

C'est bien ce que je disais si l'on tape "0.0.0.256" sa me dit ip valide


Rafou.
Messages postés
72
Date d'inscription
jeudi 15 septembre 2005
Statut
Membre
Dernière intervention
2 juin 2009

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.
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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.