begin process at 2012 05 28 21:19:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

entrer une valeur ou appuyer sur Enter pour celle par defaut


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

entrer une valeur ou appuyer sur Enter pour celle par defaut

mardi 22 février 2005 à 16:20:34 | entrer une valeur ou appuyer sur Enter pour celle par defaut

bastet1978


Bonjour voila je dois recuperer des valeurs ou les definir si l'utilsateur tappes sur Enter.
J'ai 3 questions donc trois boucles demandant trois valeurs differentes.
j'ai commence par

do{
    char memstr[256];
    printf("Dememorisation number ---(default = 1000)--> ");
    scanf("%c", &memstr);
    mem = atoi(memstr);
    if(mem == 0){
        mem = 10000;
        cout<<"\t\t\t\t\t\t"<< mem<<endl;
    }
    if(mem < 10){
        cout<<"A value less than 100 is not allowed"<<endl;
    }

}while(mem < 10 || mem > 10000);


Si j'appuie sur Enter tout va bien mais si j'entre une valeur, alors il lance les autres boucles.
Alors j'ais pense à recuperer la premiere touche avant de faire quelque chose. De cette façon ca marche parfait mais la premiere touche n'est pas ecrite. Si je veux entrer 100 il faudra que tappe deux fois sur 1 pour que le 1 s'affiche.

do{
      cout<<"Dememorisation number ---(default = 10000)--> "<<endl;
      cout<<"\t\t\t\t\t\t";
       if(getch() == '\r'){ // recup la premiere touche
            mem = 10000;
            cout<<"\n\t\t\t\t\t\t"<<mem<<endl;
        }else{
            cin>>mem;
            if(mem < 100){
               cout<<"A value less than 10 is not allowed"<<endl;
            }
        }
  }while(mem < 100 || mem > 10000);





mardi 22 février 2005 à 17:01:44 | Re : entrer une valeur ou appuyer sur Enter pour celle par defaut

yserver

La reponse est dans ce bouquin (tu le trouvera sur developpez.com)

Universite de la Mediterranee Faculte des Sciences de Luminy

Le langage C

Henri Garreta

 Un petit extrait :
7.2.4 A propos de la fonction scanf et des lectures interactives

A propos de  sauter les blancs . Nous avons dit que les sp´ecifications qui constituent le format

peuvent ˆetre s´epar´ees entre elles par un ou plusieurs blancs, ce qui indique que les donn´ees `a lire correspondantes

peuvent alors ˆetre s´epar´ees par un nombre quelconque de blancs.

Pour la fonction scanf, les blancs dans le format se traduisent donc par l’ordre  `a pr´esent, sautez tous

les caract`eres blancs qui se pr´esentent . Or la seule mani`ere pour l’ordinateur de s’assurer qu’il a bien saut´e

tous les caract`eres blancs consiste `a lire (sans le consommer) le premier caract`ere non blanc qui les suit. Si la

lecture se fait dans un fichier, cela ne pose pas de probl`eme, les caract`eres `a lire existant tous d`es le d´epart.

Mais cela peut cr´eer des situations confuses dans le cas d’une lecture interactive mettant en oeuvre le clavier et

un op´erateur vivant. Exemple :

int x, y = 33;

...

printf("donne x : ");

scanf(" %d ", &x); /* aije... */

printf("donne y : ");

scanf("%d", &y);

printf("x = %d, y = %d\n", x, y);

Parce qu’on a ´ecrit, peut-ˆetre sans faire attention, des blancs apr`es le format %d, le premier appel de scanf

ci-dessus signifie  lisez un entier et tous les blancs qui le suivent . L’op´erateur constatera avec ´etonnement que

pour que son premier nombre sont pris en compte il est oblig´e de composer le deuxi`eme ! Exemple de dialogue

(le signe { repr´esentant la frappe de la touche  Entr´ee ) :

donne x : 11{

{{

la machine ne r´eagit pas... ! ?

22{ donne y : x = 11, y = 22

Notez que faire suivre le premier nombre d’un caract`ere non blanc conventionnel n’est pas une bonne solution

car, ce caract`ere n’´etant pas consomm´e, il fait ´echouer la lecture du second nombre :

donne x : 11{ donne y : x = 11, y = 33

Le¸con `a retenir : dans le format de scanf, les blancs ne sont pas de la d´ecoration, ils jouent un rˆole bien

pr´ecis.

mercredi 23 février 2005 à 10:30:07 | Re : entrer une valeur ou appuyer sur Enter pour celle par defaut

bastet1978


Merci. je n'ai donc plus qu'à faire ma propre récuperation de valeur alors.
int cpt = 0;
    printf("Dememorisation number ---(default = 10000)--> ");
    do{
         char memstr[6];
         char buff;
         buff = getchar();
         if(buff == '\n'){ // si tappe sur Enter
            printf("t'as tappe sur Enter\n");
            printf("valeur de memstr: %d\n");
            mem = atoi(memstr); // transforme memstr en chiffre
            printf("valeur de mem: %d\n", mem);
            if(mem == 0){ // si aucun chiffre
               // alors 10000 par defaut
               mem = 10000;
               printf("%d \n", mem);
            }else{
               if(mem < 100){ // on teste si < 100
                  printf("\nA value less than 100 is not allowed\n");
                  printf("Dememorisation number ---(default = 10000)--> ");
                  // reinit
                  cpt = 0;
                  for(int i = 0; i < 6; i++){
                     memstr[i] = 0;
                  }
               }
            }
          }else{ // on ajoute buff dns memstr
            memstr[cpt] = buff;
            cpt++;
          }
       }while(mem < 100 || mem > 10000);

Bha voila comme ça ça marche.


Cette discussion est classée dans : valeur, enter, entrer, cout, mem


Répondre à ce message

Sujets en rapport avec ce message

cin ? [ par dleewax ] Bonjour !je vous explique mon cas...je suis debutant et je tente de développer un petit prog de résolution d'équation...j'aimerais que l'utilisateur p urgent svp exo sur les tableaux [ par blastmanu ] bonjour tt le monde voila mon probleme:Soit un tableau Tab1 de taille maxi Tmax=35 On veut:-Remplir Tab1 en demandant les valeur a l'utilisateur. Le n Apres un choix [ par Oruk ] Voila je sais pas si je vais etre claire mais pour faire simple je veut pour voi entrer des donnés apres avoir fait mon choix mais la je seche complet Entrer les valeur d'un tableau dans un fichier [ par Hkz ] Bonjour, je voudrai savoir comment faire et s'il était possible d'écrire toutes les données d'un tableau dans un fichier... voici se qui pose problem code correct mais rien ne s'affiche :( [ par djedu59 ] Bonsoir les programmeurs je suis entrain de creer un programme "nombre mystere" (tres courant ) que j'ai appris grace a un livre et j'essaye maintenan Probleme avec If et else [ par violatorstrain2 ] Bonjours a tous voici un bout de code d'un convertisseur hexadecimal, octal, et decimal :#include<font color="#a entrer des valeur a un String Grid [ par algerianito ] bonsoir a tous , je veux savoir est ce qu'il y a un moyen pour faire entrer un tableau de 2 dimension a l'execution d'un programme c++Builder a traver SOS top débutant programmation C++ :) [ par djilalix ] Bonjour, Je lance ce forum pour trouver une ame charitable qui puisse m'accompagner dans mes premiers balbutiements en C++. Mes premiers posts seron


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales