Je débute en C et y'a un p'tit truc que je comprends pas.......

Je débute en C et y'a un p'tit truc que je comprends pas....... - C++ - Programmation

Marsh Posté le 22-04-2002 à 21:47:50    

#include <stdio.h>
void main () {
  double nbre1, nbre2, resultat;
  int operateur;
  printf ("Entrez un premier nombre : " );
  scanf  ("%f", &nbre1);
  printf ("Entrez l'operateur       : " );
  operateur = getchar();
  printf ("\n" );
  printf ("Entrez un second nombre  : " );
  scanf  ("%f", &nbre2);
  switch (operateur) {
    case '+' : resultat = nbre1 + nbre2; break;
    case '-' : resultat = nbre1 - nbre2; break;
    case '*' : resultat = nbre1 * nbre2; break;
    case '/' : resultat = nbre1 / nbre2; break;
    default  : printf ("Les seuls opérateurs reconnus sont : +, -, * et /\nveuiller recommencer\n" );
    }
  printf ("%f %c %f = %f\n", nbre1, operateur, nbre2, resultat);
  }
 
un p'tit prog en C, juste pour m'entrainer, le truc passe a la compile mais a l'execution le getchar est "sauté"
 
je comprends pô pkoa!!!

Reply

Marsh Posté le 22-04-2002 à 21:47:50   

Reply

Marsh Posté le 22-04-2002 à 21:51:05    

c declaré en entier et tu fous un caractere dedans
et pour saisir un entier c scanf qui fo faire


---------------
:sol:
Reply

Marsh Posté le 22-04-2002 à 21:55:48    

ben a quoi y sert le getchar alors?
en plus en cours on l'avait vu comme ca il me semble (le char est un ascii noté par un entier, d'ou le int).
 
mais avant de faire ca j'avais déclaré un char et j'avais fait un scanf et ca me faisait la même chose, je vais retester (sait-on jamais)......

 

[jfdsdjhfuetppo]--Message édité par tilateur le 22-04-2002 à 21:56:07--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 22-04-2002 à 21:59:31    

#include <stdio.h>
void main () {
  double nbre1, nbre2, resultat;
  char operateur;
  printf ("Entrez un premier nombre : " );
  scanf  ("%f", &nbre1);
  printf ("Entrez l'operateur       : " );
  scanf  ("%c", &operateur);
  printf ("\n" );
  printf ("Entrez un second nombre  : " );
  scanf  ("%f", &nbre2);
  switch (operateur) {
    case '+' : resultat = nbre1 + nbre2; break;
    case '-' : resultat = nbre1 - nbre2; break;
    case '*' : resultat = nbre1 * nbre2; break;
    case '/' : resultat = nbre1 / nbre2; break;
    default  : printf ("Les seuls opérateurs reconnus sont : +, -, * et /\nveuiller recommencer\n" );
    }
  printf ("%f %c %f = %f\n", nbre1, operateur, nbre2, resultat);
  }
 
 
 
ca donne ca et ca fait exactement pareil.....

Reply

Marsh Posté le 22-04-2002 à 23:52:59    

Ah lala, scanf ...
Moi je le deteste ... voila entre autre pourquoi.
Ton getchar n'est pas sauté, il se cogne juste le retour chariot que le precedent scanf n'a pas daigné enlever du buffer d'entree stdin.
Fait un printf("%d", operateur);
et tu verras que operateur ne vaut pas 0 (il vaut '\n';);
 
Apres ton premier scanf, rajoute ceci : fflush(stdin);
ca va vider le buffer d'entree.
scanf travail en effet sur une ligne. Ton programme aurait marché sans probleme si tu avait tout regroupé :
scanf("%f %c %f", &nbre1, &operateur, &nbre2);
(avec la par contre obligatoirement char operateur;)
mais comme tu saisis ligne par ligne, ben y'a le retour chariot qui guette les debutants ... ;)
 
Donc soit tu rajoute fflush(stdin); apres chaque scanf, soit tu regroupes en un seul. (Un seul c'est mieux pour épater la galerie :
"Entrez l'opération a effectuer : "
2 + 2
"Resultat : 2 + 2 = 4." )


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed