Comment vérifier que la saisie est non nulle? - C - Programmation
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 ?
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() |
oui j'utilise une boucle while mais pour la saisie j'utilise un gets. Ton système peut il donc aller dans ce cas?
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 }
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.
Marsh Posté le 07-05-2005 à 12:50:28
Code :
|
Marsh Posté le 07-05-2005 à 12:51:41
skelter a écrit :
|
Non. En [0], il y a probablement un '\n'...
Marsh Posté le 07-05-2005 à 13:52:20
skelter 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?
Marsh Posté le 07-05-2005 à 13:57:57
nolimites a écrit : donc est ce comme cela que je dois adapter mon code? |
il me demande sans cesse mon adresse comme cela
il boucle quoi
Marsh Posté le 07-05-2005 à 14:00:04
mets tes protèges tibias jusqu'aux genoux, on sort les vissés !
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?
Marsh Posté le 07-05-2005 à 14:05:32
fflush(stdin), gets, c'est direct à la gorge normalement
fait ce qui t'a été conseillé.
Marsh Posté le 07-05-2005 à 14:09:36
++fab a écrit : fflush(stdin), gets, c'est direct à la gorge normalement |
je viens d'essayer avec fgets comme dis plus haut mais ca va tjrs pas phénomène identique à mon gets
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 |
Non, tu aurais dû écrire mes gets.
Pourquoi lis-tu deux fois sur stdin ?
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
Marsh Posté le 07-05-2005 à 14:30:31
bordel comment se prendre la tête pour un bête truc , je viens d'analyser ma variable saisie avec strlen et ca roule impec
merci pour votre aide
Marsh Posté le 07-05-2005 à 14:40:01
Code :
|
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'));
Marsh Posté le 07-05-2005 à 16:23:48
Taz a écrit : while(!fgets( buffer, sizeof buffer, stdin |
en effet !
edited
Marsh Posté le 07-05-2005 à 17:58:21
Taz a écrit : et là d'ailleurs après coup, on peut sortir ferror/feof |
oui, c'est subtilement ignoble, mais ta façon de faire ne fonctionne pas sans un ferror/feof/clearerr, ...
EDIT: ma méthode fonctionne sur mon implémentation, mais ça doit etre un hasard --> ferror/feof/clearerr
Marsh Posté le 07-05-2005 à 18:44:18
Attend, je vais essayer d'arreter de faire le noob
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 :
|
ça doit suffire
Marsh Posté le 07-05-2005 à 19:20:43
ben justement
Code :
|
avec ton truc, un pauvre CTRL-D et ça part en sucette.
Marsh Posté le 07-05-2005 à 19:42:55
Code :
|
et ça ?
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 ...
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 ...
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 :
|
Marsh Posté le 07-05-2005 à 21:33:36
bah dans ce cas
Code :
|
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]