probleme avec while ...

probleme avec while ... - C - Programmation

Marsh Posté le 20-03-2004 à 18:40:25    

Code :
  1. char choix    ;
  2.       int a,b,c      ;
  3.       while ((choix!='N')||(choix!='n'))
  4.         {
  5.         scanf("%d %d",&a,&b) ;
  6.           fflush(stdin) ;
  7. // operation(s),intructions... quelquonque ...
  8.         c = a + b  ;
  9.         printf("%d \n",c) ;
  10. //fin de boucle Question  
  11.         printf("Continuez ?? :" ) ;
  12.          
  13.                 scanf("%c",&choix) ;
  14.            fflush(stdin) ;
  15.          }


 
Voila un exemple et pourquoi le retour ne fonctionne pas ?????? Enfin le fin de boucle :/ quand je tape N ou n


Message édité par ombreee le 20-03-2004 à 19:17:05
Reply

Marsh Posté le 20-03-2004 à 18:40:25   

Reply

Marsh Posté le 20-03-2004 à 18:44:06    

Parcque la a la limite je peut faire ca avec if et break mais je trouve ca pas tres bon donc ...

Reply

Marsh Posté le 20-03-2004 à 19:04:14    

fflush(stdin) ; -> ça ne sert à rien
 
 
après chaque printf sans \n suvi d'un scanf, tu insère un fflush(stdout) et pas stdin !

Reply

Marsh Posté le 20-03-2004 à 19:07:50    

Daccord merci du conseil mais cela ne repond pas a ma reponse :/

Reply

Marsh Posté le 20-03-2004 à 19:14:26    

ecoute, commence par faire ça, d'accord ? ensuite re-teste ton programme.

Reply

Marsh Posté le 20-03-2004 à 19:16:30    

Deja fait ca ne change rien lol tu me prend pour qui ?? avec ou sans c'est pareil ,j'aurai pas poste sinon je t'aurai remercie de ton aide ....

Reply

Marsh Posté le 20-03-2004 à 19:22:34    

ok, tu sais pourquoi ?
 
parce que quand tu tapes 134 , tu valide par Entrée, et ça fait un entier et le caractère \n ...
 
donc 2 solutions pour lire l'ordre de sortie:
  - lire toute la ligne (avec fgets)
  - vider les caractères disponible avant
    while(getchar()!='\n') { /* vide */ }  
    par exemple

Reply

Marsh Posté le 20-03-2004 à 19:24:02    

ombreee a écrit :

Deja fait ca ne change rien lol tu me prend pour qui ?? avec ou sans c'est pareil ,j'aurai pas poste sinon je t'aurai remercie de ton aide ....
 

si ça change quelque chose
 
fflush(stdin); ne fais rien du tout du tout
 
et ton terminal est bufferisé en mode ligne, donc si tu fais un affichage qui se termine pas par un \n, t'es pas sur que ça s'affiche, donc si tu veux avoir à coup sur le prompt avant la saisie, tu ferais bien de prendre une bonne habitude

Reply

Marsh Posté le 20-03-2004 à 19:27:56    

ombreee a écrit :

Code :
  1. char choix    ;
  2.       int a,b,c      ;
  3.       while ((choix!='N')||(choix!='n'))
  4.         {
  5.         scanf("%d %d",&a,&b) ;
  6.           fflush(stdin) ;
  7. // operation(s),intructions... quelquonque ...
  8.         c = a + b  ;
  9.         printf("%d \n",c) ;
  10. //fin de boucle Question  
  11.         printf("Continuez ?? :" ) ;
  12.          
  13.                 scanf("%c",&choix) ;
  14.            fflush(stdin) ;
  15.          }


 
Voila un exemple et pourquoi le retour ne fonctionne pas ?????? Enfin le fin de boucle :/ quand je tape N ou n


 :lol:  :lol:  
pour sortir du while il faut donc que choix=='N' et choix=='n' ...

Reply

Marsh Posté le 20-03-2004 à 19:31:34    

Bin en fesant fflush stdin je vide le buffer clavier donc normalement au moment de la saisie du caractere c'est bon .non ?
en m aurais menti lol ?

Reply

Marsh Posté le 20-03-2004 à 19:31:34   

Reply

Marsh Posté le 20-03-2004 à 19:33:49    

fFluFf  
 
heu pourquoi Et? si je met et il faut absolument que choix doit etre == a N ET aussi a n donc pas trops possible ?
avec ou le caractere peut etre soit N soit n ...
 
les portes logique avec && c'est dans le seul cas ou les deux sont vrai! alors qu avec ou une doit etre juste vrai pour quitter la boucle


Message édité par ombreee le 20-03-2004 à 19:36:00
Reply

Marsh Posté le 20-03-2004 à 19:35:50    

ombreee a écrit :

Bin en fesant fflush stdin je vide le buffer clavier donc normalement au moment de la saisie du caractere c'est bon .non ?
en m aurais menti lol ?

oui

Reply

Marsh Posté le 20-03-2004 à 19:38:05    

lol (je vais engeuler mon prof moi)
 

Reply

Marsh Posté le 20-03-2004 à 19:41:01    

ombreee a écrit :

fFluFf  
 
heu pourquoi Et? si je met et il faut absolument que choix doit etre == a N ET aussi a n donc pas trops possible ?
avec ou le caractere peut etre soit N soit n ...
 
les portes logique avec && c'est dans le seul cas ou les deux sont vrai! alors qu avec ou une doit etre juste vrai pour quitter la boucle  


while((choix != 'N') || (choix != 'n'))
{
}
si choix vaut 'N' alors (choix !='n') est vrai donc il rentre dans le while
si choix vaut 'n' alors (choix !='N') est vrai donc il rentre dans le while
 
je te conseil :
char continue= 'o';
while(continue=='o' || continue=='O')
{
}
la tant que l'utilisateur reponds o ou O a ta question il continue.

Reply

Marsh Posté le 20-03-2004 à 19:42:31    

ou de faire un do while cupède :o

Reply

Marsh Posté le 20-03-2004 à 19:45:15    

ombreee a écrit :

fFluFf  
 
heu pourquoi Et? si je met et il faut absolument que choix doit etre == a N ET aussi a n donc pas trops possible ?
avec ou le caractere peut etre soit N soit n ...
 
les portes logique avec && c'est dans le seul cas ou les deux sont vrai! alors qu avec ou une doit etre juste vrai pour quitter la boucle  

Parce que si tu réponds "n" choix!='N' est vrai donc ca continue la boucle, idem pour "N" choix!='n' est vrai.
tandis que si tu mets un && ca marche :)

Reply

Marsh Posté le 20-03-2004 à 19:45:41    

aussi, mais bon si il arrive pas à écrire une conditions d'un while :/

Reply

Marsh Posté le 20-03-2004 à 19:46:43    

joce a écrit :

Parce que si tu réponds "n" choix!='N' est vrai donc ca continue la boucle, idem pour "N" choix!='n' est vrai.
tandis que si tu mets un && ca marche :)

[:roi]

Reply

Marsh Posté le 20-03-2004 à 19:46:49    

ombreee a écrit :

Bin en fesant fflush stdin je vide le buffer clavier donc normalement au moment de la saisie du caractere c'est bon .non ?
en m aurais menti lol ?


le fflush(stdin) n'a aucun sens, on ne peut flusher que des buffers de sortie, pas des buffers d'entrée.
encore un bel exemple de prof incompétent


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-03-2004 à 20:02:22    

Oui j'aurai du prendre 1 un && c'etait ca le probleme lol now ca fonctionne ;)


Message édité par ombreee le 20-03-2004 à 20:03:57
Reply

Marsh Posté le 20-03-2004 à 20:03:56    

t'en vas pas utiliser le  ^ binaire :o

Reply

Marsh Posté le 20-03-2004 à 20:04:17    

taz non non tkt lol

Reply

Marsh Posté le 20-03-2004 à 20:06:14    

alors tu vas faire comment ?  
 
edit: je vois toute façon pas le rapport


Message édité par Taz le 20-03-2004 à 20:07:10
Reply

Marsh Posté le 20-03-2004 à 20:09:05    

J'ai modifie certainnes de mes boucles par && tout simplement je me suis gourre de signe logique merci pour ton aide et surtout celui de joce.
 
   

Reply

Marsh Posté le 20-03-2004 à 20:12:32    

surtout fFluFf en fait :)

Reply

Marsh Posté le 20-03-2004 à 20:17:53    

Oui j'ai oubliee lol
 
C'est bete le C par contre tu te gourre sur un truc apres ta trops du mal de voir ton erreur meme simple lol ^^

Reply

Marsh Posté le 20-03-2004 à 20:19:20    

c'est pas le C qui est bête

Reply

Marsh Posté le 20-03-2004 à 20:27:21    

Taz  
Quel insinuation lol ^^ tu ma pas compris ,je voulais dire que le C n'est pas "compliquer".Je trouve que le C C++ est vraiment un bon language , mieu que visual par exemple.

Reply

Marsh Posté le 20-03-2004 à 20:42:32    

[:mlc]

Reply

Marsh Posté le 20-03-2004 à 20:43:54    

Si ça peut t'aider a ne pas refaire ce genre d'erreur, sache que non(A et B) <=> non(A) ou non(B), et que non(A ou B) <=> non(A) et non(B).

Reply

Marsh Posté le 20-03-2004 à 20:52:49    

ombreee a écrit :

Taz  
Quel insinuation lol ^^ tu ma pas compris ,je voulais dire que le C n'est pas "compliquer".Je trouve que le C C++ est vraiment un bon language , mieu que visual par exemple.


tu confondrais pas langage et IDE toi ? [:heink]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 20-03-2004 à 21:11:03    

Ouais je voulais dire pascal ( se sent pas bien aujourd'hui) ..

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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