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 :

Petit problème programme .


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7
    Par défaut Petit problème programme .
    Bonsoir a tous ,

    Tout d'abord , bravo pour votre forum , je le trouve très très sympa .

    Voici mon problème , je commence tout juste la programation en C ( je suis en première année de GEII et on a eu notre premier TP aujoud'hui ^^ ) et je voudrais me faire un petit programme qui me dise quel est le max de 2 nombres entiers . ( Genre si je rentre 4 et 9 , je veux qui me donne comme réponse 9 )

    J'ai alors fais mon programme , conpilation , tout cepasse bien , j'arrive a la console noire : entrez 2 nombres

    Et là , je ne sais pas s'il faut rentrer en suivant " 11 " ou alors " 1 1 " ....

    Car après avoir tapé mes 2 nombres ( collés ou décollés ) j'ai une erreur et la console se ferme .

    Je vous poste mon programme :
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    int main(int argc, char *argv[])
    {
         // declaration des variables
         int a; // nombres saisis au clavier
         int b; // nombre saisi au clavier
         int max; // max des 2 nombres
         float moy; // moyenne des 2 nombres
         // description de l'organigramme
         printf("entrez 2 nombre:");
         scanf("%d%d,&a&b");
         if (a>b)max=a;
         else   max=b;
         moy= (a+b)/2.0;
         printf ("le maximum : %d,la moyenne : %f",max,moy);
         system("PAUSE");	
         return 0;
         }
    Voilà , si vous pouvez m'aider , merci

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par guyom62 Voir le message
    J'ai alors fais mon programme , conpilation , tout cepasse bien
    Euh, non... Tu devrais déjà travailler sur ç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
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:13: warning: too few arguments for format
    main.c: At top level:
    main.c:4: warning: unused parameter 'argc'
    main.c:4: warning: unused parameter 'argv'
    main.c: In function `main':
    main.c:7: warning: 'a' might be used uninitialized in this function
    main.c:8: warning: 'b' might be used uninitialized in this function
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 1 seconds)
    0 errors, 5 warnings
    Si ton compilateur ne dit rien, c'est qu'il est mal réglé :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  3. #3
    Expert confirmé
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Par défaut
    En fait, ton problème est bien indentifié par le compilateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    main.c:7: warning: 'a' might be used uninitialized in this function
    main.c:8: warning: 'b' might be used uninitialized in this function
    Lorsque tu utilises ceci :

    Et que tu rentres deux entiers qui sont collés, seul a est récupéré, pour b tu ne sais pas trop ce que ça donne.

    En fait, je ne saurai trop te conseiller d'une part de ne pas utiliser scanf et d'inciter ton professeur à ne pas le faire non plus. Utilises fgets et les fonctions strto*.

  4. #4
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Il n'y a pas réellement d'erreur là dedans, mais cela ne fait certainement pas ce que tu voudrais.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Ben si, il y a erreur: La chaîne passée à scanf() contient deux spécificateurs, mais aucun autre paramètre n'est passé à scanf() --> Comportement indéfini, plantage immédiat si tu as de la chance.

    Correction minimale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    scanf("%d %d", &a, &b);
    .

    Ensuite: scanf() n'est PAS une fonction destinée aux débutants. L'enseigner aux débutants est l'une des deux pires utilisations possibles de scanf() (l'autre étant scanf("%s", etc.)).
    Si tu veux maitriser scanf(), je te conseille cette page: http://xrenault.developpez.com/tutoriels/c/scanf/
    Sinon, je te conseille d'adopter de meilleures méthodes de saisie, notamment fgets() (quitte à faire un sscanf() sur la chaîne saisie ensuite).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Correction intermédiaire (je ne maitrise pas scanf(), mais j'en connais un minimum) :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    #include <stdio.h>
    //#include <math.h>
     
    /* Fonction pour "nettoyer" après un scanf() ou un fgets() :
       Cette fonction finit de lire la ligne en cours.
       Elle retourne 0 si OK, -1 en cas d'erreur.
       */
    int nextline()
    {
    	int carac;
     
    	//Lit des caractères jusqu'à la fin de la ligne (\n) ou une erreur (EOF)
    	while( (carac=getchar())!=EOF && carac!='\n' )
    	{}
     
    	if(carac==EOF)
    		return -1;
    	else
    		return 0;
    }
     
    int main(void)
    {
    	// declaration des variables
    	int a; // nombres saisis au clavier
    	int b; // nombre saisi au clavier
    	int max; // max des 2 nombres
    	double moy; // moyenne des 2 nombres //Les fonctions mathématiques travaillent sur des double
    	int nbscanf;
     
    	// déroulement du programme
    	printf("entrez 2 nombres : ");
    	fflush(stdout); //Nécessaire car le printf() ne se termine pas par un \n (la ligne n'est pas finie).
     
    	nbscanf = scanf("%d %d", &a, &b);
    	nextline();
    	if(nbscanf != 2)
    		puts("Erreur");
    	else
    	{	
    		if(a>b)
    			max = a;
    		else
    			max = b;
    		moy = (a+b)/2.0;
    		printf("le maximum : %d, la moyenne : %f\n", max, moy);
    	}
     
    	printf("Presser [Entree] pour quitter : ");
    	fflush(stdout); //Nécessaire car le printf() ne se termine pas par un \n (la ligne n'est pas finie).
    	nextline();
    	return 0;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. [Débutant] Petit problème dans mon programme
    Par bsangoku dans le forum MATLAB
    Réponses: 8
    Dernier message: 22/04/2010, 16h19
  2. Réponses: 2
    Dernier message: 28/04/2008, 01h11
  3. Réponses: 10
    Dernier message: 02/12/2007, 00h13
  4. Petit problème de programmation.
    Par willow.A dans le forum C
    Réponses: 3
    Dernier message: 08/01/2007, 16h36
  5. petit problème de sortie de programme
    Par clampin dans le forum C
    Réponses: 2
    Dernier message: 17/06/2006, 11h51

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