noop4444
Messages postés2Date d'inscriptionmercredi 2 septembre 2020StatutMembreDernière intervention 2 septembre 2020
-
Modifié le 2 sept. 2020 à 15:24
cptpingu
Messages postés3840Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention23 août 2024
-
2 sept. 2020 à 15:59
Bonjour à tous,
Je débute en C avec mes premiers programmes
Dans le cadre d'un exercices, je fait un programme pour tester un ping ou faire le test en boucle.
cependant j'ai un soucis soit avec mes variables ou mon IF,
car une fois arrivé au choix du menu, il me renvois toujours au test ping comme si le if n'exister pas.
lors de la compilation, je n'ai aucune erreur apparente et je patauge depuis quelque temps
voici mon code et merci d'avance pour le coup de main.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int compteur;
int choix;
int menu;
compteur = 0;
choix = 0;
menu = 0;
printf("%d choix");
start:
printf ("***** Choix Mode Test PING *****\n\n");
printf (" 1) Test PING\n");
printf (" 2) Test PING Loop\n");
printf (" 3) Exit\n");
scanf("%d", &choix);
if (choix = 1)
{
goto Ping;
}
else if (choix = 2)
{
goto loop;
}
else if (choix = 3)
{
return 0;
}
Ping:
printf ("***********************************\n");
printf ("******* Debut du PING *******\n");
printf ("***********************************\n\n");
system ("ping 192.168.1.101 > out.txt");
system ("type out.txt");
printf ("***********************************\n");
printf ("******* FIN du PING *******\n");
printf ("***********************************\n\n");
printf ("Refaire le Test PING ?\n\n");
printf ("1) Oui\n");
printf ("(2) Non\n");
scanf("%d", &menu);
if(menu = 1)
{
goto Ping;
}
else if(menu = 2)
{
goto start;
}
loop:
printf (" TEST N° %d , compteur\n");
printf ("***********************************\n");
printf ("******* Debut du PING *******\n");
printf ("***********************************\n\n");
system ("ping 192.168.1.101 > out.txt");
system ("type out.txt");
printf ("***********************************\n");
printf ("******* FIN du PING *******\n");
printf ("***********************************\n\n");
compteur++;
goto loop;
}
cptpingu
Messages postés3840Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention23 août 2024126 Modifié le 2 sept. 2020 à 15:35
Bonjour !
Déjà, techniquement, tu confonds "=" et "==". "=" est là pour assigner, donner une valeur, et "==" est là pour comparer. Si tu fais if (a = 1) alors tu met 1 dans a et le résultat de l'expression (a = 1) est vrai, donc c'est comme si tu écrivais if (true).
Tes printfs sont mal écrits, les variables ne devraient pas être dans la chaîne de caractères... Exemple: printf("%d choix"); => printf("%d", choix);
Ensuite, n'utilise jamais goto. Les cas où un goto sont justifiés, sont rarissimes. Utilise des boucles. Goto va te faire coder en spaghetti et tu vas prendre de mauvaises habitudes. La bonne manière de faire, ce sont des boucles et des fonctions. C'est plus "sûr", c'est plus lisible et c'est plus modulable.
Ce n'est pas obligatoire, mais généralement, quand on veut faire un choix, au lieu de faire plein de if...else, on préfère utiliser un "switch", plus lisible.
Enfin, dernier conseil, si tu es sous Unix, quand tu compiles, utilises bien tous les flags, et ne laisse traîner aucun warning. Ton erreur de "=" au lieu de "==", le compilateur me l'a signalé immédiatement.
noop4444
Messages postés2Date d'inscriptionmercredi 2 septembre 2020StatutMembreDernière intervention 2 septembre 2020 2 sept. 2020 à 15:44
Arff !
Super, merci beaucoup,
mes "=" le compilateur me l'a signaler au départ, mais je l'ai pas vu et l'erreur à disparue après.
ok je vais continuer de potasser le "switch" et supprimer mon armée de goto.
une dernière petite question, sur la ligne 53,
j'avais dans l'idée que le compteur parte de zéro est s’incrémente à chaque boucle
mais il m'affiche une valeur énorme, alors qu'il est bien censé partir de zéro ?
cptpingu
Messages postés3840Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention23 août 2024126 Modifié le 2 sept. 2020 à 18:44
C'est ce que je t'ai indiqué plus haut sur les printf fautifs.
Tu utilises un %d, mais tu ne mets rien comme valeur dedans, il en prend une "aléatoire" (en fait, il prend un résidu mémoire).
Exemple:
printf("%d\n") => affichera 0, ou 234454646, ou n'importe quoi d'autre.
printf("toto\n") => affichera toto
printf("toto %d\n", 45) => affichera toto 45
printf("toto %d\n", compteur) => affichera toto <valeur du compteur>
printf("to%s %d\n, "to", 45) => affichera toto 45
printf("toto %d\n") affichera toto 0, ou toto 234454646, ou toto + n'importe quoi d'autre
Utilise la commande que je t'ai indiqué pour compiler, et tu n'auras plus ce genre de souci (le compilateur te le dira).