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 :

problème inconnu dans mon code


Sujet :

C

  1. #1
    Futur Membre du Club
    problème inconnu dans mon code
    Bonjour.
    J'apprend le c de mon coté depuis quelque jours en parallèle de mes cours de vb. Et je me suis fixer comme exercice de faire un programme qui convertie un nombre dans une base a une autre. mon programme et diviser en deux, l'une quant les deux base sont inférieur ou egal a 10. et l'autre quant c'est pas le cas (la premiére posibilité étant la plus simple vu que il n'y a pas besoin d'utiliser d'autre caractère que les nombre classique) donc pour cette premiére possibilité j'utilise la méthode des division successive. mon code ressemble a ça :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int main()
    {
        int depart, arriver=0, Base1, Base2, i=0;
     
        printf("dans quel base est le nombre que vous voulez convertire ?\n");
        scanf("%d", &Base1);
        printf("dans quel base voulez vous le convertire ?\n");
        scanf("%d", &Base2);
        printf("Quel est ce nombre ?\n");
        scanf("%d", &depart);
        while(depart!= 0);
        {
            arriver = arriver + ((depart % Base2)*pow(Base2,i));
            depart = depart / Base2;
            i++;
        }
        printf("%d", arriver);
        return 0;
    }


    Hors pour une raison que je n'arrive pas a comprendre, aprés la ligne 15, le programme plante. il ne se ferme pas, n'envoie pas d'erreur. comme si il tournais en boucle. J'ai tester avec un printf au tout début du while et il ne rentre même pas dans la boucle. Avez vous une idée de mon erreur ?
    Merci beaucoup d'avoir prêter attention a mon message.

  2. #2
    Expert confirmé
    Bonjour,

    Le problème est donc ligne 16. Et elle ne devrait pas avoir de point-virgule.

  3. #3
    Futur Membre du Club
    Nan mais sérieusement je me déteste quant je remarque pas des truc pareil XD
    d'ailleurs j'aurais penser que ce genre de chose ne passerais pas a la compilation...

  4. #4
    Expert éminent sénior
    Bonjour
    Citation Envoyé par Mathathias Voir le message
    d'ailleurs j'aurais penser que ce genre de chose ne passerais pas a la compilation...
    Pourquoi ? Les boucles auto-suffisantes existent et sont donc autorisées. Ce n'est donc pas une erreur détectable par le compilateur. Et tu aurais écrit while (depart != 0) { (notation K&R) tu n'aurais pas pu te tromper.
    Accessoirement, c'est "j'aurais pensé" (participe passé puisque l'action est terminée) ainsi que "j'ai testé". Le verbe "convertir" ne prend pas de "e" (ce n'est pas un adjectif qu'on accorde et de toute façon "nombre" étant masculin il n'y avait pas besoin d'accorder au féminin) en revanche, comme "base" est féminin, c'est "quelle base". Ce n'est pas parce que tu as quitté l'école que l'orthographe est devenu obsolète, surtout sur un forum où tout se fait par écrit. "a essayé" et "à essayer" n'ont absolument pas la même signification même si on les entend pareil.
    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

  5. #5
    Futur Membre du Club
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Pourquoi ? Les boucles auto-suffisantes existent et sont donc autorisées. Ce n'est donc pas une erreur détectable par le compilateur. Et tu aurais écrit while (depart != 0) { (notation K&R) tu n'aurais pas pu te tromper.
    Accessoirement, c'est "j'aurais pensé" (participe passé puisque l'action est terminée) ainsi que "j'ai testé". Le verbe "convertir" ne prend pas de "e" (ce n'est pas un adjectif qu'on accorde et de toute façon "nombre" étant masculin il n'y avait pas besoin d'accorder au féminin) en revanche, comme "base" est féminin, c'est "quelle base". Ce n'est pas parce que tu as quitté l'école que l'orthographe est devenu obsolète, surtout sur un forum où tout se fait par écrit. "a essayé" et "à essayer" n'ont absolument pas la même signification même si on les entend pareil.
    Je sais bien que l'orthographe n'est pas obsolète (et je n'ai pas quitter l'école je suis en BTS SIO) J'essaye vraiment de faire de mon mieux sur l'orthographe et la grammaire, je prend des cours particulier depuis des année etc Mais malgré tout j'ai beaucoup de mal a progresser. Mais je relis toujours mes messages pour essayer de trouver toutes les fautes que je vois.
    qu'est ce qu'une boucle auto-suffisantes ? j'ai commencer depuis très peut de temps le c je suis un débutant. Et qu'est ce que la notation K&R, pour le coup j'ai écris comme on me la appris (j'ai commencer a apprendre sur openclassroom)

  6. #6
    Expert éminent sénior
    Citation Envoyé par Mathathias Voir le message
    qu'est ce qu'une boucle auto-suffisantes ?
    C'est une boucle qui contient tout ce dont elle a besoin pour faire le job et n'a donc besoin d'aucune autre instruction. Exemple (pour compter le nombre de caractères d'une chaine): for (i=0; c[i] != '\0'; i++); (en admettant que "c" contient la chaine à compter). Quand la boucle se termine, la variable "i" contient le nombre de caractères et le point-virgule est là obligatoire.

    Citation Envoyé par Mathathias Voir le message
    Et qu'est ce que la notation K&R
    Kernighan et Ritchie (les concepteurs du C). Ils ont aussi donné des conseils d'écriture pour essayer de limiter le risque d'erreur. Par exemple l'accolade toute seule sur sa ligne ne sert à rien, et dans ce cas précis, ça aurait pu t'éviter de faire cette erreur.

    Citation Envoyé par Mathathias Voir le message
    J'essaye vraiment de faire de mon mieux sur l'orthographe et la grammaire
    Ok, accroche-toi, c'est vraiment important
    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

  7. #7
    Futur Membre du Club
    intéressant, merci je retient !

  8. #8
    Modérateur

    Bonsoir,

    Citation Envoyé par Mathathias Voir le message
    d'ailleurs j'aurais penser que ce genre de chose ne passerais pas a la compilation...
    Le code est syntaxiquement correct, donc pas d'erreur. Mais si tu demandes gentiment à ton compilateur, il peut tout de même te prévenir de ce genre d'étourderie (et bien d'autres) :

    GCC avec l'option -Wall :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    main.c: In function 'main':
    main.c:16:5: warning: this 'while' clause does not guard... [-Wmisleading-indentation]
       16 |     while(depart!= 0);
          |     ^~~~~
    main.c:17:5: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'while'
       17 |     {
          |     ^

    Clang quand à lui le fait de base :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    main.c:16:22: warning: while loop has empty body [-Wempty-body]
        while(depart!= 0);
                         ^
    main.c:16:22: note: put the semicolon on a separate line to silence this warning
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

###raw>template_hook.ano_emploi###