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

  FORUM HardWare.fr
  Programmation
  C

  Comment vérifier que la saisie est non nulle?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment vérifier que la saisie est non nulle?

n°1074641
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 12:22:29  profilanswer
 

Voila en fait je dois réaliser une vérification sur une saisie de caractère. Il s'agit donc d'un simple tableau de caractère sur lequel on fait une saisie. La seule condition à respecter est que l'on doit saisir au minimum un caractère (chiffre,lettre,...).
 
Comment faire pour effectuer cette vérification sachant que si rien n'est saisis je dois afficher un message d'erreur et après redemander la saisie ?
 
Merci :)


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
mood
Publicité
Posté le 07-05-2005 à 12:22:29  profilanswer
 

n°1074652
aurel128
Posté le 07-05-2005 à 12:37:08  profilanswer
 

c'est un peu parti loin le C mais je pense qu'il faut verifier la variable getchar()
 
: ((var=getchar())!='\0')
 
t'utilise ca dans une boucle while je suppose ?

n°1074657
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 12:41:36  profilanswer
 

aurel128 a écrit :

c'est un peu parti loin le C mais je pense qu'il faut verifier la variable getchar()
 
: ((var=getchar())!='\0')
 
t'utilise ca dans une boucle while je suppose ?


 
 
oui j'utilise une boucle while mais pour la saisie j'utilise un gets. Ton système peut il donc aller dans ce cas?


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
n°1074670
Taz
bisounours-codeur
Posté le 07-05-2005 à 12:49:37  profilanswer
 

n'importe quoi
 
if(fgets(ligne, ....) != NULL && ligne[0] != '\0' && ligne[0] != '\n') { y a quelque chose  }

n°1074671
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-05-2005 à 12:49:48  profilanswer
 

nolimites a écrit :

oui j'utilise une boucle while mais pour la saisie j'utilise un gets. Ton système peut il donc aller dans ce cas?


Ne pas utiliser gets(). C'est un bug.
 
http://mapage.noos.fr/emdel/notes.htm#saisie
 
Fait de ton mieux et montre le code qui a un problème.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1074672
skelter
Posté le 07-05-2005 à 12:50:28  profilanswer
 

Code :
  1. char buffer[1000];
  2. while( fgets( buffer, sizeof buffer, stdin ) )
  3. {
  4.     if( !buffer[0] )
  5.         continue;
  6.     ...
  7. }

n°1074675
Emmanuel D​elahaye
C is a sharp tool
Posté le 07-05-2005 à 12:51:41  profilanswer
 

skelter a écrit :

Code :
  1. char buffer[1000];
  2. while( fgets( buffer, sizeof buffer, stdin ) )
  3. {
  4.     if( !buffer[0] )
  5.         continue;
  6.     ...
  7. }



Non. En [0], il y a probablement un '\n'...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1074676
skelter
Posté le 07-05-2005 à 12:53:44  profilanswer
 

pardon j'ai fourché

n°1074678
skelter
Posté le 07-05-2005 à 12:54:27  profilanswer
 

edit


Message édité par skelter le 07-05-2005 à 12:54:55
n°1074698
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 13:52:20  profilanswer
 

skelter a écrit :

Code :
  1. char buffer[1000];
  2. while( fgets( buffer, sizeof buffer, stdin ) )
  3. {
  4.     if( !buffer[0] )
  5.         continue;
  6.     ...
  7. }



 
 
donc est ce comme cela que je dois adapter mon code?
 
char variable2[100];
 
do
{
    printf("\nVeuillez introduire l'adresse : " );
    fflush(stdin);
    gets(variable2);
    if( !variable2[0] )  
        continue;  
}
while( gets(variable2) ) ;
 
Oui je sais j'utilise gets au lieu de fgets mais ici ce n'est pas ca qui importe :)
 
Cela ira il?


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
mood
Publicité
Posté le 07-05-2005 à 13:52:20  profilanswer
 

n°1074702
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 13:57:57  profilanswer
 

nolimites a écrit :

donc est ce comme cela que je dois adapter mon code?
 
char variable2[100];
 
do
{
    printf("\nVeuillez introduire l'adresse : " );
    fflush(stdin);
    gets(variable2);
    if( !variable2[0] )  
        continue;  
}
while( gets(variable2) ) ;
 
Oui je sais j'utilise gets au lieu de fgets mais ici ce n'est pas ca qui importe :)
 
Cela ira il?


 
 
 :cry:  il me demande sans cesse mon adresse comme cela  :( il boucle quoi  :cry:


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
n°1074705
++fab
victime du syndrome IH
Posté le 07-05-2005 à 14:00:04  profilanswer
 

mets tes protèges tibias jusqu'aux genoux, on sort les vissés !

n°1074706
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 14:01:05  profilanswer
 

++fab a écrit :

mets tes protèges tibias jusqu'aux genoux, on sort les vissés !


 
 
je débute en prog donc le but est pas de démolir le débutant de dire ce qui ne va pas non?


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
n°1074716
++fab
victime du syndrome IH
Posté le 07-05-2005 à 14:05:32  profilanswer
 

fflush(stdin), gets, c'est direct à la gorge normalement :o
fait ce qui t'a été conseillé.

n°1074718
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 14:09:36  profilanswer
 

++fab a écrit :

fflush(stdin), gets, c'est direct à la gorge normalement :o
fait ce qui t'a été conseillé.


 
 
je viens d'essayer avec fgets comme dis plus haut mais ca va tjrs pas phénomène identique à mon gets  :pt1cable:


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
n°1074720
++fab
victime du syndrome IH
Posté le 07-05-2005 à 14:11:52  profilanswer
 

prends le poste de Taz, et met un do{...} while(...)

n°1074724
Elmoricq
Modérateur
Posté le 07-05-2005 à 14:14:00  profilanswer
 

nolimites a écrit :

je viens d'essayer avec fgets comme dis plus haut mais ca va tjrs pas phénomène identique à mon gets  :pt1cable:


 
Non, tu aurais dû écrire mes gets.  :o  
 
Pourquoi lis-tu deux fois sur stdin ?

n°1074725
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 14:14:08  profilanswer
 

++fab a écrit :

prends le poste de Taz, et met un do{...} while(...)


 
ben justement ca ne va pas non plus  :cry:


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
n°1074740
nolimites
Z'avez pas vu Mirza?
Posté le 07-05-2005 à 14:30:31  profilanswer
 

bordel comment se prendre la tête pour un bête truc  :fou: , je viens d'analyser ma variable saisie avec strlen et ca roule impec :)
 
merci pour votre aide ;)


---------------
[:xx_xx] "Imagination is more important than knowlegde" citation de Albert Einstein qui prend tout son sens dans notre monde actuel [:xx_xx]  
n°1074752
++fab
victime du syndrome IH
Posté le 07-05-2005 à 14:40:01  profilanswer
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.      char buffer[256];
  5.      do
  6.      {
  7.   puts("Entrer une phrase:" );
  8.      }
  9.      while(!fgets( buffer, sizeof buffer, stdin) || buffer[0] == '\n' || buffer[0] == '\0');
  10. }

n°1074774
Taz
bisounours-codeur
Posté le 07-05-2005 à 15:10:56  profilanswer
 

while(!fgets( buffer, sizeof buffer, stdin
 
pourquoi ! ?
 
 
while(fgets(buffer, sizeof buffer, stdin) && (buffer[0] == '\n' || buffer[0] == '\0'));

n°1074814
++fab
victime du syndrome IH
Posté le 07-05-2005 à 16:23:48  profilanswer
 

Taz a écrit :

while(!fgets( buffer, sizeof buffer, stdin
pourquoi ! ?


en effet !
 
edited


Message édité par ++fab le 07-05-2005 à 16:27:20
n°1074817
Taz
bisounours-codeur
Posté le 07-05-2005 à 16:30:02  profilanswer
 

et là d'ailleurs après coup, on peut sortir ferror/feof :D

n°1074920
++fab
victime du syndrome IH
Posté le 07-05-2005 à 17:58:21  profilanswer
 

Taz a écrit :

et là d'ailleurs après coup, on peut sortir ferror/feof :D


oui, c'est subtilement ignoble, mais ta façon de faire ne fonctionne pas sans un ferror/feof/clearerr, ... :D
EDIT: ma méthode fonctionne sur mon implémentation, mais ça doit etre un hasard --> ferror/feof/clearerr


Message édité par ++fab le 07-05-2005 à 18:22:32
n°1074986
++fab
victime du syndrome IH
Posté le 07-05-2005 à 18:44:18  profilanswer
 

Attend, je vais essayer d'arreter de faire le noob :o
 
 
man fgets : [...]
gets() and fgets() return s on success, and NULL on  error  or  when  end  of  file
occurs
while no characters have been read.[...]
 

Code :
  1. #include <stdio.h>
  2.   int main()
  3.   {
  4.      char buffer[256];
  5.       do
  6.        {
  7.        puts("Entrer une phrase:" );
  8.       }
  9.       while(!fgets( buffer, sizeof buffer, stdin) || buffer[0] == '\n');
  10.   }


 
ça doit suffire  [:petrus75]

n°1075033
Taz
bisounours-codeur
Posté le 07-05-2005 à 19:20:43  profilanswer
 

ben justement  
 

Code :
  1. #include <stdio.h>
  2. static int
  3. is_valid(const char* s)
  4. {
  5. return s[0] != '\0' && s[0] != '\n';
  6. }
  7. int main()
  8. {
  9. char input[80];
  10. do
  11. {
  12.  printf("prompt > " );
  13.  fflush(stdout);
  14. }
  15. while(fgets(input, sizeof input, stdin) && !is_valid(input));
  16. if(feof(stdin))
  17.  return 1;
  18. if(ferror(stdin))
  19.  return 2;
  20. printf("got \"%s\"\n", input);
  21. return 0;
  22. }


 
avec ton truc, un pauvre CTRL-D et ça part en sucette.

n°1075062
++fab
victime du syndrome IH
Posté le 07-05-2005 à 19:42:55  profilanswer
 

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.      char buffer[256];
  5.      puts("Entrer une phrase:" );
  6.      while(!fgets( buffer, sizeof buffer, stdin) || buffer[0] == '\n')
  7.      {
  8.   if(feof(stdin) || ferror(stdin))
  9.         clearerr(stdin);
  10.   puts("Entrer une phrase:" );
  11.      }
  12.      /* ... */
  13. }


et ça ?

n°1075066
Taz
bisounours-codeur
Posté le 07-05-2005 à 19:47:04  profilanswer
 

mais non ! pour cette négation !
 
et puis avec ton truc, c'est pire, si je ctrl-d, la manière propre de terminée un programme, et bien ça veut pas à cause de ton clearerr qui ignore l'utilisateur. Et puis faire un clearerr sur autre chose que eof ...

n°1075072
++fab
victime du syndrome IH
Posté le 07-05-2005 à 19:57:53  profilanswer
 

AAAhh !
Depuis d'taleur, je faisais exprès de récupérer le Ctrl-D justement !
Mais, c'est pas très judicieux effectivement ...

n°1075128
Erendis
Posté le 07-05-2005 à 21:26:24  profilanswer
 

Euh soit j'ai ptet mal lu le topic, mais un truc bien pratique ça serait quand meme de faire un test avec strlen,
 

Code :
  1. if( strlen(buffer) == 0 ) {
  2.        printf("Vous devez saisir un texte\n" );
  3.      }


 

n°1075130
Taz
bisounours-codeur
Posté le 07-05-2005 à 21:27:26  profilanswer
 

non, parce que strlen("\n" ) == 1

n°1075133
Erendis
Posté le 07-05-2005 à 21:33:36  profilanswer
 

bah dans ce cas  
 

Code :
  1. if( strlen(buffer) <= 1 ) {
  2.        printf("Vous devez saisir un texte\n" );
  3.      }


Message édité par Erendis le 07-05-2005 à 21:33:50
n°1075136
Taz
bisounours-codeur
Posté le 07-05-2005 à 21:47:23  profilanswer
 

et si je ne rentre qu'un seul caractère ?

mood
Publicité
Posté le   profilanswer
 


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

  Comment vérifier que la saisie est non nulle?

 

Sujets relatifs
fermer un userform sur saisie d'un mot de passeVerifier la redondance de mots ou de lettres dans formulaire
Saisie et contrôle dune Date dans un formulaireun upload chez free : comment verifier taille des images ? [RESOLU]
generer captcha et verifier saisie dans formulaire [RESOLU]verifier l'existance d'un onglet dans une feuille
Saisie clavier sous NetBeansprobleme de saisie avec cin.getline()
une saisie --> un lien 
Plus de sujets relatifs à : Comment vérifier que la saisie est non nulle?


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