Comment vérifier que la saisie est non nulle?

Comment vérifier que la saisie est non nulle? - C - Programmation

Marsh Posté le 07-05-2005 à 12:22:29    

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]  
Reply

Marsh Posté le 07-05-2005 à 12:22:29   

Reply

Marsh Posté le 07-05-2005 à 12:37:08    

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 ?

Reply

Marsh Posté le 07-05-2005 à 12:41:36    

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]  
Reply

Marsh Posté le 07-05-2005 à 12:49:37    

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

Reply

Marsh Posté le 07-05-2005 à 12:49:48    

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/
Reply

Marsh Posté le 07-05-2005 à 12:50:28    

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

Reply

Marsh Posté le 07-05-2005 à 12:51:41    

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/
Reply

Marsh Posté le 07-05-2005 à 12:53:44    

pardon j'ai fourché

Reply

Marsh Posté le 07-05-2005 à 12:54:27    

edit


Message édité par skelter le 07-05-2005 à 12:54:55
Reply

Marsh Posté le 07-05-2005 à 13:52:20    

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]  
Reply

Marsh Posté le 07-05-2005 à 13:52:20   

Reply

Marsh Posté le 07-05-2005 à 13:57:57    

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]  
Reply

Marsh Posté le 07-05-2005 à 14:00:04    

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

Reply

Marsh Posté le 07-05-2005 à 14:01:05    

++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]  
Reply

Marsh Posté le 07-05-2005 à 14:05:32    

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

Reply

Marsh Posté le 07-05-2005 à 14:09:36    

++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]  
Reply

Marsh Posté le 07-05-2005 à 14:11:52    

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

Reply

Marsh Posté le 07-05-2005 à 14:14:00    

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 ?

Reply

Marsh Posté le 07-05-2005 à 14:14:08    

++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]  
Reply

Marsh Posté le 07-05-2005 à 14:30:31    

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]  
Reply

Marsh Posté le 07-05-2005 à 14:40:01    

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. }

Reply

Marsh Posté le 07-05-2005 à 15:10:56    

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

Reply

Marsh Posté le 07-05-2005 à 16:23:48    

Taz a écrit :

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


en effet !
 
edited


Message édité par ++fab le 07-05-2005 à 16:27:20
Reply

Marsh Posté le 07-05-2005 à 16:30:02    

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

Reply

Marsh Posté le 07-05-2005 à 17:58:21    

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
Reply

Marsh Posté le 07-05-2005 à 18:44:18    

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]

Reply

Marsh Posté le 07-05-2005 à 19:20:43    

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.

Reply

Marsh Posté le 07-05-2005 à 19:42:55    

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 ?

Reply

Marsh Posté le 07-05-2005 à 19:47:04    

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 ...

Reply

Marsh Posté le 07-05-2005 à 19:57:53    

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

Reply

Marsh Posté le 07-05-2005 à 21:26:24    

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.      }


 

Reply

Marsh Posté le 07-05-2005 à 21:27:26    

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

Reply

Marsh Posté le 07-05-2005 à 21:33:36    

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
Reply

Marsh Posté le 07-05-2005 à 21:47:23    

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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