Probleme variable programme debutant C

Résolu
noop4444 Messages postés 2 Date d'inscription mercredi 2 septembre 2020 Statut Membre Dernière intervention 2 septembre 2020 - Modifié le 2 sept. 2020 à 15:24
cptpingu Messages postés 3834 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 20 octobre 2021 - 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;
}

4 réponses

Whismeril Messages postés 17829 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 5 octobre 2022 618
2 sept. 2020 à 14:37
Bonjour

Merci d’éditer ton message pour y incorporer les balises de code, voir ce petit tuto
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
cptpingu Messages postés 3834 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 20 octobre 2021 125
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.

J'aime bien utiliser ceci pour du C:
gcc -W -Wall -ansi -pedantic -Werror *.c



Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0
noop4444 Messages postés 2 Date d'inscription mercredi 2 septembre 2020 Statut Membre Derniè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 ?

merci encore pour le coup de pouce.
0
cptpingu Messages postés 3834 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 20 octobre 2021 125
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).

Améliorer votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
0