IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

impossible de faire une boucle


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2020
    Messages : 4
    Par défaut impossible de faire une boucle
    Bonjour, je débute dans la programmation, j'ai lu un livre et téléchargé code blocs. puis j'ai voulu essai de code pour pratique et pour ce que je voulais faire, il était nécessaire de faire une boucle. Cependant celle-ci ne s'effectue pas quand ma 1er condition est remplie elle affiche tout de même la question de la 2e condition. Pourriez-vous m'aide à résoudre mon problème et a progressé merci?
    je vous copier/coller mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #include <stdio.h>
    #include <stdlib.h>
    /* pour utiliser string il faut créer une chaîne de char suivi de chaine et pour déterminer sa longueur déclare le réceptacle */
     
    int main()
    {
        char chaine[] = "lettre";
        printf("Bonjour!\n");
        printf("comment va tu?\n");
        scanf("%s", &chaine);
       if ( "%s", chaine == "bien")
        {
     
            printf("alors temps mieux!");
        }
     
     
     else if ( "%s" , chaine == "mal")
         {
            printf ("pourquoi?\n");
     
        scanf("%s" , &chaine );
        printf("c'est a cause de sa");
     
        return 0;
                     }
     
    /* impossible de bien faire fonctionner la boucle la suite ce déclenche tout de meme*/

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Je pense que le chapitre 0 doit introduire que les boucles sont for, while ou do while. Et aucun de ces mots n'est dans ton code... donc je vois pas trop bien où tu espères exécuter une boucle ici ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 260
    Par défaut
    et pour comparer une chaine à une valeur, on utilise strcmp pas ==.

    et que fait "%s" devant la comparaison ? Ca compile ce truc ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 151
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    et que fait "%s" devant la comparaison ? Ca compile ce truc ?
    La magie de l'opérateur , : oui ça compile, et ça ne fait absolument rien.

    Citation Envoyé par foetus Voir le message
    Je peux me tromper mais ce n'est pas le premier depuis quelques mois, et je les soupçonne venant du Web - JavaScript, PHP ou Python - et qu'il y a 1 module en C "à travailler"
    C'est cyclique tous les ans : début d'année, fin d'année, période de projets.
    Un coup tu as 30 personnes qui doivent faire un pendu, un autre ils doivent créer un carnet d'adresses.
    On a même déjà vu des étudiants d'une même classe poster, ce qui est flagrant quand le poste est un scan du sujet...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Bonjour,
    Citation Envoyé par Bousk Voir le message
    Je pense que le chapitre 0 doit introduire que les boucles sont for, while ou do while. Et aucun de ces mots n'est dans ton code... donc je vois pas trop bien où tu espères exécuter une boucle ici ?
    C'est une erreur classique des débutants, qui appellent "boucle" ce qui est une structure conditionnelle.

    J'aimerais d'ailleurs bien savoir dans quel *%&@& de bidule ils apprennent ça.

  6. #6
    Expert confirmé
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 226
    Par défaut
    C'est quand même n'importe quoi , j'ai l’impression qu'il invente le langage C , comme dit plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( "%s", chaine == "bien")
    J'ai l'impression que tu crois que le if fonctionne comme printf ?

    Il y'a de grosse lacunes sur la compréhension du langage là , et pas seulement pas savoir utilisé une boucle.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Kannagi Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( "%s", chaine == "bien")
    J'ai l'impression que tu crois que le if fonctionne comme printf ?
    Dans l'absolu c'est un raisonnement qui se tient. Faux bien entendu parce que basé sur un postulat faux dès le départ mais il suit une logique qui aurait pu fonctionner (et qui, en plus, fonctionne dans d'autres langages comme Python).
    En fait il a juste tenté d'"extrapoler" ce qu'il ne sait pas en fonction du peu qu'il sait.

    Citation Envoyé par Kannagi Voir le message
    Il y'a de grosse lacunes sur la compréhension du langage là ,
    Ah évidemment, rien ne vaut la lecture des tutos. Malheureusement beaucoup s'imaginent que les tutos c'est comme les ReadMe, ça ne sert à rien.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 769
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Dans l'absolu c'est un raisonnement qui se tient.
    Je peux me tromper mais ce n'est pas le premier depuis quelques mois, et je les soupçonne venant du Web - JavaScript, PHP ou Python - et qu'il y a 1 module en C "à travailler"

    Et les gars ne se doutant de rien, se lancent sur le travail (<- je sais c'est moche de ma part)
    • Pour la comparaison de 2 chaines c'est ==. En C,
    • Pour la concaténation de 2 chaines c'est +. En C,
    • Pour la gestion Unicode OSEF. En C,
    • Ma connection avec ma base de données est chiffrée. En C, il faut le bon module (sûrement installation, compilation et dépendance)
    • Je fais de l'Ajax à tour de bras. En C, c'est différent ... très différent.
    • Sans parler du gars qui n'a pas percuté (ou ne le savait pas ) que le C est 1 langage compilé et non interprété - Pourquoi gcc ne m'affiche pas "Hello World!" ?
    • ...

  9. #9
    Membre très actif
    Homme Profil pro
    Programmeur des cavernes
    Inscrit en
    Août 2017
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Programmeur des cavernes
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 364
    Par défaut
    Citation Envoyé par louli20 Voir le message
    (...) Bonjour, je débute dans la programmation (...)
    C'est à dire ? Est-ce que tu es en train d'apprendre tout(e) seul(e) pour le plaisir, ou bien est-ce que tu as commencé à suivre une formation ?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2020
    Messages : 4
    Par défaut seul
    J'ai commencer a apprendre tout seul.

  11. #11
    Membre très actif
    Homme Profil pro
    Programmeur des cavernes
    Inscrit en
    Août 2017
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Programmeur des cavernes
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 364
    Par défaut
    Pour l'instant tu n'as pas l'air d'avoir compris grand chose à ce que tu as appris et c'est assez inquiétant...

    D'où viennent les infos à partir desquelles tu fais ton apprentissage ?

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par louli20 Voir le message
    J'ai commencer a apprendre tout seul.
    Tout se joue sur ta définition de "apprendre". Par exemple pour moi, "apprendre" c'est "télécharger un tuto, le lire, taper les exemples qui y sont écrits et regarder ce qu'ils font et ce que dit ledit tuto sur certains détails desdits exemples". Mais bon peut-être que ma méthode est périmée et que tu en as une plus efficace...

    Donc tes erreurs les plus flagrantes
    • char chaine[] = "lettre": alors ça ça fonctionne toutefois le tableau créé fera pile poil la taille nécessaire au stockage du mot. Ca peut suffire si tu ne fais que lire ce mot, mais comme en dessous tu demandes à faire saisir un nouveau mot, tu as beaucoup de risques que l'utilisateur saisisse plus de lettres et que ça dépasse. Et le souci c'est que le C, pour gagner le plus de vitesse possible, ne fait absolument aucun contrôle sur ce genre de détail (principe de base en prog C: le programmeur sait ce qu'il fait). Ce qui amène alors à un comportement indéterminé (le pire des cas possibles) où ton programme peut faire absolument n'importe quoi, et pas forcément à cet endroit du code. Donc dans ce cas, dans un premier temps, il vaut mieux alors définir une taille toi-même pour être tranquille => char chaine[100] = "lettre". Bien entendu ça n'enlève pas le risque que l'utilisateur saisisse 200 caractères mais ça le réduit fortement (et tu peux mettre 1000 si tu veux). Plus tard tu apprendras à faire des saisies plus sécurisées.
    • scanf("%s", &chaine): pas de "&" pour un tableau (or une string est un tableau de caractères). C'est dû au fait que le nom du tableau inclus déjà le "&" de façon implicite (chaine <=> &chaine[0]). Tu apprendras ça avec les pointeurs
    • if ( "%s", chaine == "bien"): bon ben là tout le monde t'a dit que c'était le grand n'importe quoi. Le formatting "%s" n'est utilisé que par et pour les fonctions de type printf(). Et une chaine en C n'étant qu'une suite de caractères juste tenue par son premier (une fois qu'on a le premier on peut atteindre les suivants par simple décalage) on ne peut pas comparer deux chaines en écrivant if ("chaine1" == "chaine2"). Il faut comparer chaque caractère un à un par une boucle (une vraie, pas une "boucle if" !!!!!!!). Heureusement les concepteurs ont créé une fonction qui fait déjà ce travail => strcmp(). Ne te reste qu'à lire la doc sur sa façon de travailler.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48
  3. faire une boucle ds un formulaire
    Par gohu13 dans le forum Access
    Réponses: 1
    Dernier message: 21/09/2005, 12h54
  4. Réponses: 2
    Dernier message: 01/08/2005, 16h55
  5. Comment faire une boucle ???
    Par HookerSeven dans le forum Access
    Réponses: 6
    Dernier message: 17/06/2005, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo