Problème avec un petit langage C
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Problème avec un petit langage C



  1. #1
    lordchameau

    Problème avec un petit langage C


    ------

    Bonjour à tous, j'ai l'habitude d'écrire dans la section physique, mais cette session j'ai un cours qui s'appelle physique numérique et notre outils de base est le code C. Malheureusement pour moi je ne suis aps familier avec ce code et c'Est pourquoi je suis ici aujourd'hui.

    Alors voila j'ai fait un code très simple de comparaison de valeur, mais je n'arrive pas à avoir la bonne réponse. Mon code marche (il n'y a pas d'erreur d'écriture ), mais ça ne donne pas ce que je veux et je suis bloqué. Je n'arrive pas à voir ce qu'il manque.

    Mon premier if marche très bien, mais les deux autres me donnent des réponses du genre 426004.
    Si quelqu'un pouvait m'aider. Merci beaucoup et soyez indulgent c'est mon deuxième code à vie.

    Code:
    #include <stdio.h>
    int main(void)
    /* Ce code choisi le plus grand de deux entiers en entree */
    {
    /* Declarations ----------------------------------------- */
    int n, p, maxi ;
    /* Executable ------------------------------------------- */
    printf("donnez deux nombres entiers : ") ;
    scanf ("%d%d", &n, &p) ;
    if (n < p )
    { maxi = p ; }
    if ( n > p )
    { maxi = n ; }
    else
    { maxi = "les deux nombres sont égaux" ; }
    printf ("le plus grand des deux est : %d\n", maxi) ;
    }

    -----
    Dernière modification par yoda1234 ; 14/09/2011 à 07h32.

  2. #2
    invitea0ecda6e

    Re : Problème avec un petit langage C

    Je ne m'y connais pas trop en C mais si tu définis maxi comme un entier, tu ne peux pas faire ça:
    Code:
    maxi = "les deux nombres sont égaux"
    Sinon ça ressemble à un problème de pointeur tout ça (le 426004 me fait penser à une adresse de pointage) mais comme je l'ai dit, je ne suis pas assez expert en C...

    PS: Essaye d'utiliser la balise CODE pour rendre ton code plus lisible

  3. #3
    yoda1234

    Re : Problème avec un petit langage C

    Citation Envoyé par Tlaloc Voir le message
    PS: Essaye d'utiliser la balise CODE pour rendre ton code plus lisible
    J'ai rectifié. .
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  4. #4
    Jack
    Modérateur

    Re : Problème avec un petit langage C

    Tu as parfaitement identifié le problème Tlaloc

    D'une part, le langage C ne permet pas l'affectation des chaines de caractères et d'autre part il n'est pas logique d'affecter une chaine de caractères à une variable entière.

    A+

  5. A voir en vidéo sur Futura
  6. #5
    danyvio

    Re : Problème avec un petit langage C

    Outre le problème indiqué par tlaloc, il faut remplacer le deuxième if par elseif.

    En effet, comme tu as programmé, le else est exécuté même si n<p
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  7. #6
    Jack
    Modérateur

    Re : Problème avec un petit langage C

    exact, mais avec un espace entre le else et le if.

    A+

    PS: il faut laisser lordchameau chercher un peu je pense, sinon l'exercice n'a plus d'intérêt
    Dernière modification par Jack ; 14/09/2011 à 12h09.

  8. #7
    lordchameau

    Re : Problème avec un petit langage C

    Bonjour à tous, j'ai pris les commentaires et j'ai "gosser" le code de plusieurs façons différentes. J'ai compris que je ne pouvais pas demander à la variable maxi d'être un entier et une chaîne de caractère (ce qui est logique maintenant pour moi). J'Ai ensuite essayé d'utiliser le code "else if", mais encore là je n'Arrivais pas à faire comprendre à l'ordinateur la fonction d'égalité.

    Code:
    #include <stdio.h>
    int main(void)
    /* Ce code choisi le plus grand de deux entiers en entree */
    {
    /* Declarations ----------------------------------------- */
    int n, p, maxi ;
    
    /* Executable ------------------------------------------- */
    printf("donnez deux nombres entiers : ") ;
    scanf ("%d%d", &n, &p ) ;
    
    if ( n == p )
    printf ("les deux nombres sont egaux\n") ;
    
    if (n < p )
    { maxi = p ; }
    
    else
    { maxi = n ; }
    
    printf ("le plus grand des deux est : %d\n", maxi) ;
    En ce moment je suis capable de faire marcher mes deux printf, mais le problème c'Est que lorsqu'il y a deux chiffres pareils, le deuxième printf répond lui aussi, heureusement cette fois-ci il répond le chiffre que j'ai mis. Je ne comprends pas comment lui dire d'arrêter, je pensais que le if était supposé faire ça. if (n == p) devrait seulement faire apparaître le premier printf (du moins dans ma logique à moi), mais le deuxième s'écrit lui aussi et si je mets else if sur la deuxième condition je fais réapparaître l'énorme chiffre 426004. Est ce que qulelqu'un peut m'expliquer comment lui dire d'arrêter après le premier printf si la condition est réalisée.
    Merci beaucoup

  9. #8
    invite4492c379

    Re : Problème avec un petit langage C

    Dans un premier temps je scinderais mon scanf :

    Code:
    printf("Premier entier : ");
    scanf("%d",&n);
    printf("Second entier : ");
    scanf("%d",&p);
    Ensuite j'engloberais bien mes conditionnelles :

    Code:
    if (n==p)
    {
     ...
    }
    else 
    {
      if (n<p)
      {
        ...
      }
      else
      {
        ...
      }
    }
    Ensuite tu peux évidemment simplifier en :

    Code:
    if (n<p)
    {
      ...
    }
    else if (n>p)
    {
      ...
    }
    else 
    {
      ...
    }
    Attention de bien indenter ton code pour la lecture ...
    D'utiliser == pour un test d'égalité et pas = qui est l'affectation ...

  10. #9
    invitea0ecda6e

    Re : Problème avec un petit langage C

    ça me paraitrait plus logique d'écrire:
    Code:
    if ( n == p ) {
      printf ("les deux nombres sont egaux\n") ;
    } else {
      if (n < p ) {
        maxi = p ;
      } else {
        maxi = n ;
      }
      printf ("le plus grand des deux est : %d\n", maxi) ;
    }
    ici ce n'est pas un problème d'informatique mais de logique.
    Si ça peux t'aider, tu peux essayer de faire la même chose en écrivant en français avant de te lancer dans le code

  11. #10
    invite4492c379

    Re : Problème avec un petit langage C

    En fait je crois que le découpage que tu souhaites est plutôt :

    Code:
    if (n==p)
    {
        // Tout le code concernant le cas n==p
        printf("Les nombres sont égaux\n");
    }
    else
    {
        if (n>p)
        {
            // Tout le code concernant n>p
            maxi = n ;
        }
        else // ici p>n
        {
            // Tout le code concernant p>n
            maxi = p;
        }
        // Ici le code concernant (p>n) et (p<n)
       printf("Max(%d,%d)=%d\n",n,p,maxi);
    }
    Cross post ...

  12. #11
    lordchameau

    Re : Problème avec un petit langage C

    Bonjour et merci encore de m'aider.

    J'ai essayé vos codes et à moins d'être vraiment nul à recopier cela donne la même chose que moi, quand je run le programme et que j'écris les deux entiers 1 1, j'obtiens les deux réponses c'est à dire les deux nombres sont égaux et 2130567168. Peut être c'Est mon programme qui déconne, j'utilise code blocks.
    Merci

  13. #12
    Jack
    Modérateur

    Re : Problème avec un petit langage C

    Citation Envoyé par lordchameau Voir le message

    J'ai essayé vos codes et à moins d'être vraiment nul à recopier cela donne la même chose que moi, quand je run le programme et que j'écris les deux entiers 1 1, j'obtiens les deux réponses c'est à dire les deux nombres sont égaux et 2130567168. Peut être c'Est mon programme qui déconne, j'utilise code blocks.
    Merci
    Ca n'est pas possible. Si tu as bien recopié le code qui t'a été donné ça DOIT marcher.

    Dans Code::Blocks es-tu bien sur d'éditer le bon fichier? Il faut que ce soit celui du projet.

    A+

  14. #13
    LABTOOL48

    Re : Problème avec un petit langage C

    Citation Envoyé par lordchameau Voir le message
    Bonjour et merci encore de m'aider.

    J'ai essayé vos codes et à moins d'être vraiment nul à recopier cela donne la même chose que moi, quand je run le programme et que j'écris les deux entiers 1 1, j'obtiens les deux réponses c'est à dire les deux nombres sont égaux et 2130567168. Peut être c'Est mon programme qui déconne, j'utilise code blocks.
    Merci
    bonjour
    Code:
    if (n<p)
    {
        // Tout le code concernant le cas n<p
        maxi = p;
    }
    else if (n>p)
           {
               // Tout le code concernant n>p
               maxi = n ;
           }
           else // ici p == n
           {
               printf("Les nombres sont égaux\n");
           }

Discussions similaires

  1. probleme avec le langage script
    Par invitebd580a5b dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 01/12/2010, 08h57
  2. langage C : problème avec scanf
    Par invitedba13d1f dans le forum Logiciel - Software - Open Source
    Réponses: 20
    Dernier message: 20/04/2009, 18h41
  3. problème avec le langage pascal
    Par invite49b54ac2 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 28/01/2009, 12h45
  4. problème avec langage C++
    Par invite0f6e0be6 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 03/10/2007, 12h20
  5. Petit problème en langage C. Please Help!
    Par invite00a39544 dans le forum Électronique
    Réponses: 4
    Dernier message: 25/03/2007, 18h33