Probleme variable programme debutant C [Résolu]

Signaler
Messages postés
2
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
2 septembre 2020
-
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
-
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

Messages postés
14855
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
444
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
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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
Messages postés
2
Date d'inscription
mercredi 2 septembre 2020
Statut
Membre
Dernière intervention
2 septembre 2020

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.
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
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