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 :

fonction qui renvoie 0


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut fonction qui renvoie 0
    Bonjour,
    Je débute en C++ et, premier problème, j'essaie de créer un programme qui calcule et affiche le minimum de deux entiers ... Je vous accorde que cela n'a rien de transcendant mais il faut bien commencer par quelque part ...

    Voici le fichier source :

    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<windows.h>
     
    int Min(int, int);
    int x, y;
     
    int main (void)
    {
        printf("Calcul de minimum\n");   /* Affiche le titre. */
        printf("Entrez le premier nombre : ");
        scanf("%Lf", &x);            /* Entre le premier nombre. */
        printf("\nEntrez le deuxieme nombre : ");
        scanf("%Lf", &y);            /* Entre le deuxième nombre. */
        int min = Min(x,y);
        printf("le minimum est : %d. \n", min);
        system("pause") ;
    }
     
    int Min(int i, int j)
    {
        if (i<j) return i;
        else return j;
    }
    Quand j'exécute le programme, je rentre bien mes deux variables mais celui-ci me renvoie toujours 0 comme minimum ...
    Je ne comprends pas d'où viens le problème.
    Merci de répondre à une question qui doit vous sembler bien triviale ...

    Teubreu

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est plutôt du C. Si ton prof te dis que c'est du C++, change de prof.

    1. Les variables globales c'est le mal. Utilise des variables locales tat que tu n'as pas besoin de les déclarer globales.
    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
    #include <stdio.h>
    #include <windows.h>
     
    int Min(int, int);
     
    int main (void)
    {
        int x, y;
        ...
    }
     
    int Min(int i, int j)
    {
        if (i<j)
            return i;
        else
            return j;
    }
    2. C'est scanf("%d", &x) car x est un int. Pareil pour y. "%Lf" c'est à utiliser si x est de type long double. Il y a des tutoriels sur ce site que je t'invite à lire si tu ne sais pas encore utiliser printf et scanf.
    3.Conseil : Déclare min aux côtés de x et y et écris à la place de "int min = ..." : "min = ...".
    4. A la fin de main(), il faut return 0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int main(void)
    {
        ...
        return 0;
    }

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    Salut,

    Le problème vient de ton scanf : tu utilises %Lf qui scanne un flotant, et tu le mets dans un entier. Il doit y avoir un warning à la compilation d'ailleurs.

    Dans tous les cas, utiliser scanf n'est pas une bonne idée, cette fonction n'est pas sure.
    De plus, en C++, on préfère utiliser les flux standards pour ce genre d'opérations. Tu devrais te renseigner sur std::cin et std::cout. Voilà un bout de code qui devrait convenir (pas testé)

    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 <iostream>
     #include<windows.h>
     
    using std::cout;
    using std::cin;
     
    int Min(int, int);
    int x, y;
     
    int main (void)
    {
        cout >> "Calcul de minimum\n";   /* Affiche le titre. */
        cout >> ("Entrez les deux nombres : \n");
        cin >> x >> y;
        int min = Min(x,y);
        cout << "le minimum est : " << min << ". \n";
        system("pause") ;
    }
     
    int Min(int i, int j)
    {
        if (i<j) return i;
        else return j;
    }
    Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...

    Comment ça 1Km n'est pas égal à 1024m ???

  4. #4
    Expert confirmé
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 4 062
    Points
    4 062
    Par défaut
    4. A la fin de main(), il faut return 0
    Inutile, ça revient strictement au même.

    En revanche c'est mieux car cela explicite le comportement du main.

    Pour vraiment mettre en évidence la sémantique du comportement il faut utiliser la constante EXIT_SUCCESS de <cstdlib>
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  5. #5
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Merci !
    Merci à tous pour vos réponses si rapide !!

    @ Melem

    Je n'ai pas de professeur, j'apprends (pour l'instant) en autodidacte.
    C'était bien un oubli de ma part, il suffisait de mettre %d au lieu de %Lf (je n'ai pensé a le changé qu'au dernier appel.
    Le programme semble fonctionner avec des variables globales mais je vais essayer de m'habituer à ne les déclarer que localement.
    Je n'ai pas bien compris ce que change le point 3 ??

    @ Le Mérovingien
    Je n'ai pas encore vu l'utilisation des flux en profondeur, je vais me renseigner sur std::cin et std::cout (et le >> que je n'ai encore jamais vu).
    Mais printf et scanf ne sont pas sensé géré aussi les flux ??

    En tout cas merci à tous pour vos réponses, surtout pour une telle question de débutant (et je n'ai pas fini de vous harceler ...).

    Teubreu

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Attention, il y a eu confusion

    Teubreu a initialement posté son message dans C++

    Comme ce message ne parlait que de C et pas du tout de C++, je l'ai déplacé dans le forum C

    Le Mérovingien a proposé une réponse en C++ (std::cin et std::cout et >>, c'est du C++). Cette réponse ne peut pas fonctionner en C.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Le programme semble fonctionner avec des variables globales mais je vais essayer de m'habituer à ne les déclarer que localement.
    Bien sûr ça fonctionne, mais c'est toujours mieux de mettre les choses au bon endroit. Il y a aussi d'autres raisons que tu découvriras avec l'expérience.
    Je n'ai pas bien compris ce que change le point 3 ??
    En langage "C ANSI" (la version du C la plus répandue), on ne peut déclarer les variables qu'en début de bloc. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(void)
    {
        int a = 1, b = 2;
        int c;
     
        printf("...");
        ...
        c = a + b;
        ...
        return 0;
    }
    Ceci n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main(void)
    {
        int a = 1, b = 2;
     
        printf("...");
        ...
        int c; /* Pas en debut de bloc ! */
        c = a + b;
        ...
        return 0;
    }
    Mais printf et scanf ne sont pas sensé géré aussi les flux ??
    printf et scanf sont des fonctions du C, présentes également en C++ mais si en C++, on préfère utiliser cin, cout, etc.

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2005
    Messages : 147
    Points : 165
    Points
    165
    Par défaut
    Exact, quand j'ai répondu ce message était encore dans la catégorie C++. Donc si tu veux faire du C, oublies le cout, cin et les << et >>.
    Il faut aussi que tu utilises #include <stdlib.h> au lieu de #include <cstdlib> pour suivre les conseils de seriousme.

    Un conseil cependant, nous serons toujours là pour répondre à tes questions, mais la lecture d'un cours et de la FAQ C est une très bonne démarche d'apprentissage.

    Bon courage en tout cas
    Avec les ordinateurs, 99% des bugs proviennent de l'interface chaise-clavier...

    Comment ça 1Km n'est pas égal à 1024m ???

  9. #9
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par seriousme Voir le message
    4. A la fin de main(), il faut return 0
    Inutile, ça revient strictement au même.
    En C99 oui.
    Mais, de mémoire, ce n'était pas vrai en C89 (malheureusement, je n'ai pas la norme sous les yeux pour confirmer ou infirmer mon souvenir).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction qui renvoie un tableau?
    Par elm dans le forum C
    Réponses: 23
    Dernier message: 21/12/2005, 13h44
  2. Réponses: 31
    Dernier message: 25/10/2005, 19h26
  3. Fonction qui renvoie erreur dans mon état
    Par Daniel MOREAU dans le forum Access
    Réponses: 1
    Dernier message: 20/10/2005, 13h40
  4. [bioinfo] fonction qui renvoie chaîne à autre fonction
    Par perlaud dans le forum Bioinformatique
    Réponses: 11
    Dernier message: 16/07/2004, 16h06
  5. [VB6] Comment faire une fonction qui renvoie 2 résultats
    Par tazarine dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/01/2004, 01h13

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