Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1857 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Newb - scanf et caractere

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Newb - scanf et caractere

n°347597
TiTan91
Posté le 30-03-2003 à 17:17:35  profilanswer
 

salut les mecs !
 
encore une fois je viens vous demander un peu d aide :D  
 
voila je voudrais faire un prog ki se relance ou qui quitte a la fin au choix de l utilisateur
 
voila ce que j ai fait :
 

Code :
  1. void main()
  2. {
  3. int choix;
  4. do
  5. {
  6.  // programme
  7.  do
  8.  {
  9.   fflush(stdin);
  10.   printf("\n\nVoulez-vous essayer une autre fois (0/1) ? \n" );
  11.   scanf("%d \n", &choix);
  12.  }while (choix != 0 &&  choix != 1);
  13.  system("cls" );
  14. }while (choix == 0);
  15. }


 
le gros probleme c est qu en faisant ca il me demande de faire le choix et la je dois rentrer 2 nombres (sans qu il me redemande) !
seul le premier est pris en compte :??:  
 
en revanche si j ajoute un mot dans le scanf
scanf ("votre choix : %d \n", &choix);
alors je ne dois plus rentrer qu un seul nombre mais il n est jamais bon donc le programme va reposer la question
 
de plus j aimerais remplacer 1 et 0 par O et N mais je ne sais pas comment faire :??:

mood
Publicité
Posté le 30-03-2003 à 17:17:35  profilanswer
 

n°347610
Poireau
Posté le 30-03-2003 à 17:40:33  profilanswer
 

Salut
Essaye plutôt ça :

Code :
  1. scanf("%d", &choix);


 
Pour utilise 'O' ou 'N' il suffit de changer choix de type, et le code :

Code :
  1. char choix;
  2.    
  3.      do
  4.      {
  5.        
  6.         // programme
  7.        
  8.         do
  9.         {
  10.            fflush(stdin);
  11.            printf("\n\nVoulez-vous essayer une autre fois (O/N) ? \n" );
  12.            scanf("%c", &choix);
  13.         }while (choix != 'O' &&  choix != 'N');
  14.         system("cls" );
  15.      }while (choix == 'N');

n°347615
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-03-2003 à 17:44:32  profilanswer
 

Poireau a écrit :

fflush(stdin);


 :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
n°347616
Poireau
Posté le 30-03-2003 à 17:51:26  profilanswer
 

fflush(stdin);
 
Oui j'ai pas fait attention... Cette fonction n'est pas utile ici.
 
C'est pour forcer l'ecriture des donnees il me semble...
 
The  function  fflush  forces a write of all buffered data
for the given output or update  stream  via  the  stream's
underlying  write function. The open status of the stream
is unaffected.

n°347618
TiTan91
Posté le 30-03-2003 à 17:55:41  profilanswer
 

Poireau a écrit :

Salut
Essaye plutôt ça :

Code :
  1. scanf("%d", &choix);


 
Pour utilise 'O' ou 'N' il suffit de changer choix de type, et le code :

Code :
  1. char choix;
  2.    
  3.      do
  4.      {
  5.        
  6.         // programme
  7.        
  8.         do
  9.         {
  10.            fflush(stdin);
  11.            printf("\n\nVoulez-vous essayer une autre fois (O/N) ? \n" );
  12.            scanf("%c", &choix);
  13.         }while (choix != 'O' &&  choix != 'N');
  14.         system("cls" );
  15.      }while (choix == 'N');




 
OK merci pour les caracteres je savais pas qu il fallait mettre ' autour
 
pour le scanf il ne demande plus qu une fois c bon  :jap:  
ca a l air de fonctionner a peu pres sauf qu il pose deux fois la question au lieu d une :ouch:  

n°347620
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-03-2003 à 17:56:22  profilanswer
 

Poireau > C'est pas qu'elle est pas utile, c'est qu'elle est indéfinie !
fflush(stdin) ne devrait jamais être utilisée, car fflush n'est censé être défini que sur les flux autorisant l'écriture (taz avait posté un lien à ce sujet, je sais plus trop ce que c'était).
Si tu veux vider le buffer du clavier, il vaut mieux lire tous les caractères un par un jusqu'a ce que tu tombes sur le caractère de fin de ligne :
 

Code :
  1. c = getchar();
  2. if (c != '\n')
  3.   while ((getchar()) !=  '\n'){};


Message édité par Harkonnen le 30-03-2003 à 17:56:48

---------------
J'ai un string dans l'array (Paris Hilton)
n°347636
Taz
bisounours-codeur
Posté le 30-03-2003 à 18:41:46  profilanswer
 

http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
eh, les mecs, faites une petite recherche avant de poster, y a des tas de topics a propos de scanf etc. ca evite de se répéter et ça vous apprendra pas mal de truc.  :hello:

n°347654
TiTan91
Posté le 30-03-2003 à 19:04:10  profilanswer
 

++Taz a écrit :

http://forum.hardware.fr/forum2.ph [...] h=&subcat=
 
eh, les mecs, faites une petite recherche avant de poster, y a des tas de topics a propos de scanf etc. ca evite de se répéter et ça vous apprendra pas mal de truc.  :hello:  


 
desole mais j y comprend rien...

n°347674
TiTan91
Posté le 30-03-2003 à 19:33:05  profilanswer
 

bon en fait g remis le fflush(stdin) ca a l air de marcher
 
mais je sais pas du tt pkoi :heink:
 
 
en tt cas merci a vous tous :jap:


Message édité par TiTan91 le 30-03-2003 à 19:37:17
n°347679
Taz
bisounours-codeur
Posté le 30-03-2003 à 19:41:35  profilanswer
 

on prends la peine de te répondre, prends la peine de nous lire

mood
Publicité
Posté le 30-03-2003 à 19:41:35  profilanswer
 

n°347688
TiTan91
Posté le 30-03-2003 à 19:58:21  profilanswer
 

vi mais qd tu me renvoit vers un sujet ou ca parle de trucs que j ai jamais vu ca m avance pas bcp...

n°347692
Taz
bisounours-codeur
Posté le 30-03-2003 à 20:04:25  profilanswer
 

j'ai donné ce lien à propos de fflush et ce topic parle exactement du mçme problème que celui que tu rencontre. Harko t'as tres bien répondu.
 
Apprends à lire

n°347695
Angel_Doog​las
Le dernier des humains
Posté le 30-03-2003 à 20:09:44  profilanswer
 

titan91 a écrit :

bon en fait g remis le fflush(stdin) ca a l air de marcher
 
mais je sais pas du tt pkoi :heink:
 
 
en tt cas merci a vous tous :jap:  


 
 [:touki]  
 
Je confirme que ce ne sera pas grace au fflush :o


Message édité par Angel_Dooglas le 30-03-2003 à 20:10:18
n°347720
TiTan91
Posté le 30-03-2003 à 20:56:37  profilanswer
 

++Taz a écrit :

j'ai donné ce lien à propos de fflush et ce topic parle exactement du mçme problème que celui que tu rencontre. Harko t'as tres bien répondu.
 
Apprends à lire


 
ptet mais le fflush y en a besoin pour ke ca marche bien !
et c pas ce ke j avais compris !
 
qd au pkoi de la chose...

n°347724
Taz
bisounours-codeur
Posté le 30-03-2003 à 21:02:17  profilanswer
 

non, y a pas besoin du fflush qui d'ailleur ne fais rien. si tu lisais nos reponses, ca fait un bon moment que t'aurais compris et que t'aurais arreté de nous les briser

n°347743
theshockwa​ve
I work at a firm named Koslow
Posté le 30-03-2003 à 21:24:31  profilanswer
 

A ce que j'en ai compris, c'est pas tout à fait que le fflush ne fait rien ... C'est que dans ton cas tout à fait particulier de configuration d'OS, ca marche par miracle ... donc si jamais c'est pour un TP ou si tu passes ton prog à un pote, tu peux être certain à 99.9% que ca va foirer ...
 
Qu'est-ce que ca te coûte de remplacer ton fflush par des getchar ? Alors qu'au moins, tu seras sur que ton prog marchera partout ...


---------------
last.fm
n°347746
Taz
bisounours-codeur
Posté le 30-03-2003 à 21:27:12  profilanswer
 

surtout que le getchar fonctionne

n°347785
TiTan91
Posté le 30-03-2003 à 22:24:24  profilanswer
 

mais c koi getchar ???
 
commetn je l'utilise pour ne pas avoir 2 fois le message ?


Message édité par TiTan91 le 30-03-2003 à 22:26:28
n°347786
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 30-03-2003 à 22:27:17  profilanswer
 

titan91 a écrit :

mais c koi getchar ???
 
commetn je l'utilise pour ne pas avoir 2 fois le message ?


euh, t'as lu le code que je t'ai filé plus haut ? :heink:
tu remplaces le fflush(stdin) par ce code !


---------------
J'ai un string dans l'array (Paris Hilton)
n°347795
Taz
bisounours-codeur
Posté le 30-03-2003 à 22:44:27  profilanswer
 

RTFM

n°347812
TiTan91
Posté le 30-03-2003 à 23:06:25  profilanswer
 

Harkonnen a écrit :


euh, t'as lu le code que je t'ai filé plus haut ? :heink:
tu remplaces le fflush(stdin) par ce code !


 
mais c fo le definir comment ?


Message édité par TiTan91 le 30-03-2003 à 23:07:58
n°347822
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-03-2003 à 23:19:50  profilanswer
 

Poireau a écrit :


C'est pour forcer l'ecriture des donnees il me semble...


 
pourquoi tu l'emploie pour la lecture alors ? [:ddr555]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°347823
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-03-2003 à 23:20:02  profilanswer
 

titan91 a écrit :


 
mais c fo le definir comment ?


 
essaie de deviner [:dawa]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°347833
Poireau
Posté le 30-03-2003 à 23:30:41  profilanswer
 

antp a écrit :


 
pourquoi tu l'emploie pour la lecture alors ? [:ddr555]


Moi j'ai juste recopier le code qu'il y avait à la base...
J'ai pas fait attention à ce fameux fflush.
 
Pour info titan91, getchar permet de recuperer le contenu du flux stdin caractère par caractère. Le but étant ici de le vider manuellement (en arrivant jusqu'au caractère '\n';) avec le code de Harkonnen.
getchar ne retourne pas un char, car la valeur spécifique EOF ne peut être codé dans un char.

n°348538
TiTan91
Posté le 31-03-2003 à 19:50:47  profilanswer
 

merci bcp les mecs !
 
mais c fini c rendu (c t un projet)
en tt cas ca marche sans pb sur les autres machines ou g teste  :D

n°348617
antp
Super Administrateur
Champion des excuses bidons
Posté le 31-03-2003 à 22:02:04  profilanswer
 

Poireau a écrit :


Moi j'ai juste recopier le code qu'il y avait à la base...
J'ai pas fait attention à ce fameux fflush.


 
Ouais je t'avais confondu avec l'auteur du topic :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°348623
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 31-03-2003 à 22:14:12  profilanswer
 

titan91 a écrit :

merci bcp les mecs !
 
mais c fini c rendu (c t un projet)
en tt cas ca marche sans pb sur les autres machines ou g teste  :D  


t'as utilisé fflush() ? :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
n°349546
TiTan91
Posté le 01-04-2003 à 20:04:29  profilanswer
 

ouaip...

n°349548
Taz
bisounours-codeur
Posté le 01-04-2003 à 20:10:04  profilanswer
 

juste une supposition. ton prof en corrigenat vas pas s'amuser à taper N(le nombre de programme)* les donénes. il fera un ficheir et redirigera. enjoy le fflush!

n°349621
theshockwa​ve
I work at a firm named Koslow
Posté le 01-04-2003 à 22:28:29  profilanswer
 

++Taz a écrit :

juste une supposition. ton prof en corrigenat vas pas s'amuser à taper N(le nombre de programme)* les donénes. il fera un ficheir et redirigera. enjoy le fflush!


:lol:
 
[:xp1700]


---------------
last.fm
n°349658
TiTan91
Posté le 02-04-2003 à 00:02:27  profilanswer
 

???
g pas capte ?
 
de tte facon en cours on nous a dit ke fflush ca vidait le clavier et on s en est servi pour une saisie securisee (nombres uniquement)
donc mon truc c juste une adaptation ;)

n°349688
Taz
bisounours-codeur
Posté le 02-04-2003 à 05:34:12  profilanswer
 

tonc ours est mauvais et archi faut
 
 
tu commences à m'énerver à ne pas lire ce qu'on te donne!
 

Citation :

le comportement de fflush sur des flux entrants est absolument indéfini et ne fais absolument rien sur la plupart des systemes: et si ca fonctionne sur votre systeme, soyez sure que ça ne fonctionnera pas ailleurs. c'est le plus gros mythe qui existe en C. pour vider un flux, il faut lire à coup de fgetc .|
 
[...]
non. le fait est que fflush,ça n'a pas de sens sur un flux d'entrée. quand on dit fluser unf lux, on veut dire, finaliser les operations d'ecriturs bufferisés pour assurer la cohérence avec son disuqe dur par exemple. donc onv eut pas dire: coup de baguette magique, fais disparaitre le contenu du buffer. pourtant c'est ce qu'attende les gens quand ils font ça

n°349692
Angel_Doog​las
Le dernier des humains
Posté le 02-04-2003 à 06:04:36  profilanswer
 

Il te dit qu'il ne capte pas, c'est pas la peine de lui repeter la meme chose :o
 

Citation :


14.4 Pourquoi ne jamais faire fflush(stdin) ?
La fonction fflush() a un comportement défini uniquement sur les flux ouverts en écriture tels que stdout. Il est possible que sur votre système, appliquer cette fonction à stdin soit possible, mais c'est alors une extension non standard. Le comportement est indéterminé, et imprévisible.
 
Il faut bien comprendre que stdin n'est pas forcément relié au clavier, mais peut être rattaché à un réseau, un fichier, etc.  


 
PS: en substance ca dit exactement la meme chose, hein :D
 
RePS:
Voila comment il faut faire (mais on te l'a deja dit plus haut  :whistle: , mais bon tant que j'y suis):
 
 

Citation :

14.5 Comment vider le buffer associé à stdin ?
Une bonne manière est de lire sur le flux tant qu'il n'est pas vide, avec les fonctions habituelles comme fgets() ou getchar(). Voici un exemple avec cette dernière :
 
    c = getchar();
    if (c != '\n';)
        while ( (getchar()) !=  '\n';) {
    };
     
 
Ce morceau de code permet de lire un caractère, et vide ce qui peut rester dans le buffer, notamment le '\n' final.


Message édité par Angel_Dooglas le 02-04-2003 à 06:08:13
n°349693
Taz
bisounours-codeur
Posté le 02-04-2003 à 06:07:26  profilanswer
 

ben ca vient du lien que je lui ai donné. s'il capte pas, on y peut  rien, c'est qu'il a un problème de compréhension du français.

n°349914
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 11:17:05  profilanswer
 

Edit : nnaaaan ... J'préfère rien dire ... :D


Message édité par theshockwave le 02-04-2003 à 11:17:52

---------------
last.fm
n°350164
TiTan91
Posté le 02-04-2003 à 14:49:41  profilanswer
 

ok...
j comprend pas a 100% comment ca fonctionne mais j essayerais ca sur mon nouvo projet :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Newb - scanf et caractere

 

Sujets relatifs
[c++] compter les voyelles dans une chaine de caracterechaine de caractere .
Taille d'une chaine de caractere ?????[RESOLU] newb - pkoi cette erreur ???
taille max d'une chaine de caractère en java?Recherche dans une chaine de caractere
Comment tester le dernier caractère d'un fichier (suite de hier)[Newb] VC++ : Comment modifier le contenu d'un Edit Box ?
[newb]DEVc++ : trouve pas librairie socket.h[DOS] Remplacer une chaine de caractere
Plus de sujets relatifs à : Newb - scanf et caractere


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR