[c] ya un truc que je capte po avec scanf et les char

ya un truc que je capte po avec scanf et les char [c] - C++ - Programmation

Marsh Posté le 19-11-2002 à 23:07:28    

Code :
  1. int main(void)
  2. {
  3.       /*** declaration des  variables operande1, operateur, operande2 ***/
  4.       float res;
  5.       float op1,op2;
  6.       char op;
  7.       /*** on demande d'abord le permier nombre puis l operateur  puis le dernier nombre ***/
  8.       printf("\npremier nombre:" );
  9.       scanf("%f", &op1);
  10.       printf("\noperande:" );
  11.       scanf("%s", &op); <---- ici si je met %c il me demande pas mon caratére est passe directement a la suite pkoi ?
  12.       printf("deuxieme nombre:" );
  13.       scanf("%f", &op2);
  14.       res=calcul(op1,op2,op);
  15.       printf("resulat : %f\n", res);
  16.       return EXIT_SUCCESS;
  17. }

 
 
voila un prog banal, mais je comprend pas pkoi avec un scanf(%c, op) il passe directement a l instruction suivante, de plus quand je demande d afficher la variable op, c un retour a la ligne ki apparait !!!

Reply

Marsh Posté le 19-11-2002 à 23:07:28   

Reply

Marsh Posté le 19-11-2002 à 23:17:04    

pcq scanf premier du nom ne tiens pas comte du retour chariot de la fin du premier chiffre  
 
essai:
 

Code :
  1. int main(void)
  2. {
  3.      /*** declaration des  variables operande1, operateur, operande2 ***/
  4.      float res;
  5.      float op1,op2;
  6.      char op;
  7.      /*** on demande d'abord le permier nombre puis l operateur  puis le dernier nombre ***/
  8.      printf("\npremier nombre:" );
  9.      scanf("%f", &op1);
  10.      printf("\noperande:" );
  11.      scanf("\n%c", &op); <---- ici si je met %c il me demande pas mon caratére est passe directement a la suite pkoi ?
  12.      printf("deuxieme nombre:" );
  13.      scanf("\n%f", &op2);
  14.      res=calcul(op1,op2,op);
  15.      printf("resulat : %f\n", res);
  16.      return EXIT_SUCCESS;
  17. }


 
 
je c pas si c la methode propre mais ici ca marche ;)


Message édité par leirn le 19-11-2002 à 23:17:22

---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 19-11-2002 à 23:22:20    

ah oui ca marche thx  
 
mais je capte po pkoi enfin le concept de ce phénoméne !!!
 
 

Reply

Marsh Posté le 19-11-2002 à 23:25:15    

asphro a écrit a écrit :

ah oui ca marche thx  
 
mais je capte po pkoi enfin le concept de ce phénoméne !!!
 
 




 
très honnetement moi non plus, mais g diagnostiker kil avait un \n de trop ds le buffer ;) (enfin ca c le pourkoi, mais scanf devrait le virer, ca ferai mieux)


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 19-11-2002 à 23:27:43    

serieux je pige pas trop la !!
 
je reste perplexe la dessus !!
 
 
enfin peut-être qq'un va pouvoir me dire qu'elle en est vraiment la cause !!
 
 
enfin bon sinon thx now je connais la bidouille ;)

Reply

Marsh Posté le 19-11-2002 à 23:28:42    

asphro a écrit a écrit :

serieux je pige pas trop la !!
 
je reste perplexe la dessus !!
 
 
enfin peut-être qq'un va pouvoir me dire qu'elle en est vraiment la cause !!
 
 
enfin bon sinon thx now je connais la bidouille ;)




 
si ta d'autre bidouille, je suis l'expert... :D


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 20-11-2002 à 00:20:09    

essai getc sinon


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 20-11-2002 à 05:41:47    

parce que le buffer contient '\n' qui passe dans c au scanf suivant. fo le vier en faisant une boucle


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 20-11-2002 à 05:59:20    

un flushall(); avant chaque saisie ca regle pas ce genre de probleme...? c p-e pas tres propre... :pt1cable:


---------------
[:zeitoon] HxC rulezzzzzzzzz
Reply

Marsh Posté le 20-11-2002 à 06:28:22    

c po standard et ca veut rien dire de flusher un flux d'entrée


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 20-11-2002 à 06:28:22   

Reply

Marsh Posté le 20-11-2002 à 06:30:01    

Taz@PPC a écrit a écrit :

c po standard et ca veut rien dire de flusher un flux d'entrée



:cry:  :heink: bah merde alors c'est ce qu'on nous apprends en cours... halala ces profs  :pfff:   :pfff:   :pfff:  
bah je vais continué a  :sleep: en cours alors [:m300a]


Message édité par albino13 le 20-11-2002 à 06:30:28

---------------
[:zeitoon] HxC rulezzzzzzzzz
Reply

Marsh Posté le 20-11-2002 à 18:02:30    

Taz@PPC a écrit a écrit :

parce que le buffer contient '\n' qui passe dans c au scanf suivant. fo le vier en faisant une boucle




 
ah ok !!!
thx pour l 'info

Reply

Marsh Posté le 21-11-2002 à 04:13:17    

%f, %i, et %s demandent à scanf d'analyser la séquence d'entrée pour y reconnaitre quelquechose. Dès qu'il trouve un espace ou un \n, il s'arrête... et le laisse.
Il suffit donc de lui dire de manger le séparateur attendu: scanf("%f %i\n",...)%c prends un caractère quel qu'il soit, y compris \n.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 21-11-2002 à 14:03:41    

Musaran a écrit a écrit :

%f, %i, et %s demandent à scanf d'analyser la séquence d'entrée pour y reconnaitre quelquechose. Dès qu'il trouve un espace ou un \n, il s'arrête... et le laisse.
Il suffit donc de lui dire de manger le séparateur attendu: scanf("%f %i\n",...)%c prends un caractère quel qu'il soit, y compris \n.




 
g essayé en mettant le separateur a la fin du premier scanf, il passe jamais la main au second... ya k'en le mettant devant le second que ca passait


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
Reply

Marsh Posté le 22-11-2002 à 09:14:38    

déclaration:fais un char op[20] ou un char *op et fais un calloc  
sur le nbre d'espace a reservé
 
apres scanf("%s", op)
sans le &
je dis ptete une connerie mais c ce que g compris au tp que je viens de faire :)

Reply

Marsh Posté le 22-11-2002 à 09:18:25    

ah si c juste pr un operateur, dc 1 caractère: normal faut mettre %c et pas %s.
 
char op;
scanf("%c", &op);
ca te mets un caractère ds op
sinon, %s c'est une chaine de caractère, donc un tableau, dc un pointeur. donc tu le declares:
char op[dim];
scanf("%s", op);
 
ou  
char *op;
op=calloc(dim,sizeof(char));
scanf("%s",op);
 
ou dim est le nbre de caractere.
 
bon, chuis pas un expert.

Reply

Marsh Posté le 22-11-2002 à 09:19:54    

bah vi c skil a fait leirn rien a voir avec le \n a mon avis

Reply

Sujets relatifs:

Leave a Replay

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