Introduction d'une contrainte dans un programme en C

Lap-top Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -  
Lap-top Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour a tous. Je suis nouveau dans le domaine de la programmation. La je cherche a concevoir un programme en langage C qui reçoit en entrée une adresse IP (décimale) et qui ressort sa classe et son adresse BROADCAST. J'ai pu le faire mais là je veux ensuite limiter la valeur de chaque octet entre 0 et 255 pour ainsi donc afficher "Erreur" à l'écran de l'utilisateur lorsqu'il saisit une valeur négative ou supérieur à 255. Aidez moi SVP.

Voici le code que j'ai créé:

#include <stdio.h>
#include <stdlib.h>

int main()

{ int a,b,c,d=0;

        printf("\nEntrez la valeur decimale de votre premier octet  :\t");
            scanf("%d",&a);
        printf("\nEntrez la valeur decimale de votre deuxieme octet :\t");
            scanf("%d",&b);
        printf("\nEntrez la valeur decimale de votre troisieme octet:\t");
            scanf("%d",&c);
        printf("\nEntrez la valeur decimale de votre quatrieme octet:\t");
            scanf("%d",&d);

    if (a<=126)
    {
    printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
    printf("\n\nC est une adresse de classe : A\t\n");
    printf("\nLe masque de reseau est : 255.0.0.0\n");
    printf("\nL adresse BROADCAST est : %d 255.255.255",a);
    }
        else if (a>=128 && a<=191)
        {
        printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
        printf("\n\nC est une adresse de classe : B\n");
        printf("\nLe masque de reseau est : 255 255 0 0\n");
        printf("\nL adresse BROADCAST est : %d %d 255 255",a,b);
        }
           else if (a>=192 && a<=223)
            {
            printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
            printf("\n\nC est une adresse de classe : C\t\n ");
            printf("\nLe masque de reseau est : 255 255 255 0\n");
            printf("\nL adresse BROADCAST est : %d %d %d 255",a,b,c);
            }
                else if (a>=224 && a<=239)
                {
                printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
                printf("\n\nC'est une adresse de classe D pour le multicasting\n");
                printf("\nLe masque du reseau est 255 255 mais il n existe pas de notion de BROADCAST");
                }
    printf("\n\n");
  return 0;
}

1 réponse

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

et qui ressort sa classe et son adresse BROADCAST.
Pour info, ca n'existe plus depuis presque 20 ans, la notion de classe...

Sinon, pour que l'utilisateur choisit un nombre entre 0 et 255, il suffit de faire une boucle while (jusqu'à ce que le nombre soit entre 0 et 255).

Cdlt,
0
Lap-top Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   9
 
J'ai essayé avec while, ça passe toujours pas. Le programme ne me donne pas ce que je veux. Tu peux essayer de m'expliquer comment le mettre dans le code que j'ai posté la stp?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Montre plutôt ce que tu tenté avec ton while que je te dise ce qui ne va pas.
0
Lap-top Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   9
 
#include <stdio.h>
#include <stdlib.h>

int main()

{ int a,b,c,d=0;

       printf("\nEntrez la valeur decimale de votre premier octet  :\t");
            scanf("%d",&a);
        printf("\nEntrez la valeur decimale de votre deuxieme octet :\t");
            scanf("%d",&b);
        printf("\nEntrez la valeur decimale de votre troisieme octet:\t");
            scanf("%d",&c);
        printf("\nEntrez la valeur decimale de votre quatrieme octet:\t");
            scanf("%d",&d);

while ((a<256 || a>=0) && (b<256 || b>=0) && (c<256 || c>=0) && (d<256 || d>=0))
{


    if (a<=126)
    {
    printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
    printf("\n\nC est une adresse de classe : A\t\n");
    printf("\nLe masque de reseau est : 255.0.0.0\n");
    printf("\nL adresse BROADCAST est : %d 255.255.255",a);

 }
     else if (a>=128 && a<=191)
        {
        printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
        printf("\n\nC est une adresse de classe : B\n");
        printf("\nLe masque de reseau est : 255 255 0 0\n");
        printf("\nL adresse BROADCAST est : %d %d 255 255",a,b);
        }
           else if (a>=192 && a<=223)
            {
            printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
            printf("\n\nC est une adresse de classe : C\t\n ");
            printf("\nLe masque de reseau est : 255 255 255 0\n");
            printf("\nL adresse BROADCAST est : %d %d %d 255",a,b,c);
            }
                else if (a>=224 && a<=239)
                {
                printf("\n\nVotre adresse IP est %d %d %d %d",a,b,c,d);
                printf("\n\nC'est une adresse de classe D pour le multicasting\n");
                printf("\nLe masque du reseau est 255 255 mais il n existe pas de notion de BROADCAST");
                }


}

 printf("\n\n Erreur: entrez une valeur comprise entre 0 et 255 pour chaque octet");
    printf("\n\n");
  return 0;
}
0
Lap-top Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   9
 
voici ce que j'ai fait
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Alors, le while est mal placé. Ce sont les nombres qui doivent être retapés s'ils ne sont pas dans la bonne fourchette, pas le bloc fonctionnel...
De plus, attention dans ton code tu as initialisé d à 0 mais pas les autres variables. Dans ton code, ce n'est pas obligatoire mais vu que tu l'as fait pour une seule variable, je préfère préciser.
Voici ce qu'il faudrait faire (dans ce cas, il faut initialiser la variable)
Ca serait plutôt :
int a=-1; /*n'importe quel nombre en dehors de la fourchette pour qu'on rentre dans la boucle*/
while(a<0 || a>255) {
     printf("\nEntrez la valeur decimale de votre premier octet  :\t");
     scanf("%d",&a);
}

Je te laisse répéter ce processus pour b, c et d.

if (a<=126)
C'est plutôt a<=127 pour la classe A.

else if (a>=128 && a<=191)
Pas besoin de préciser >=128 puisque tu es dans un else if. (Sauf si tu veux vraiment exclure (à tort) le cas a=127).
Même remarque pour les autres else if.

Tu peux même parler de la classe E (a>=240) : classe réservée. Dans ce cas, un simple else (sans condition suffira).

Pour la classe D, le masque de sous-réseau que tu as mis est faux. Il est non défini.

Sinon, attention à l'indentation. Elle n'est pas bien faite.

Cdlt,
0