Probleme de verification chaine de caracteres

Signaler
Messages postés
21
Date d'inscription
jeudi 30 mai 2013
Statut
Membre
Dernière intervention
25 février 2017
-
Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
-
Bonjour,


Je veux juste pourvoir saisir n'importe quoi au clavier, des phrases, des chiffres avec espaces etc.. mais que la saisie ne soit valide que si on entre un nombre (positif ou negatif) sans espace si quelqu'un peut m'aider sans serait sympa

Voir ci-dessous:




| | | | |  | | | | |
| | | | |  | | | | |
| | | | |  | | | | |

guet,  combien prenez vous d'allumettes  ? 1eee
guet,  combien prenez vous d'allumettes  ? 1eee 2
guet,  combien prenez vous d'allumettes  ? 2 3 5

| | | | |  | | |
| | | | |  | | |
| | | | |  | | |





Voilà le code qui fait défaut :

allumette_valide=true;
		
	
					do {
							
						nombre_correcte = false;
						do
						{
							nombre_correcte = true;
							printf("%s, combien prenez vous d'allumettes ? ",nom);
							scanf("%s",nombre);
							scanf("%*[^n]");
							getchar();

						for(int i = 1; i < MAX; i++)
								{
									if(nombre[i] == '')
										{
											i = MAX;
										}
									else if(nombre[i] < '0' || nombre[i] > '9')
										{
											nombre_correcte = false;
										}
								}

									if(nombre_correcte == true)
									{
										allumette_enleve = strtol(nombre, 0, 10);

									if(allumette_enleve == 0 && (int)(nombre[0]-'0') != 0)
										{
											nombre_correcte = false;
										}
									}

						}
						while(nombre_correcte == false);

1 réponse

Messages postés
3829
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
8 janvier 2021
114
Bonjour.

Pourquoi faire un scanf avec un %s, si tu veux lire un nombre ?
Il te suffit simplement de faire un scanf avec un %i (signed). A noter que scanf est une fonction et que celle-ci renvoie le nombre d'entrées récupérées avec succès. Donc si quelqu'un met autre chose qu'un numéro, scanf te renverra une valeur différente du nombre d'arguments auquel tu t'attends. (Ici: != 1). Il est donc facile de gérer les entrées incorrectes.

Je t'invite à lire la documentation de cette fonction, pour voir tout ce que cette fonction est capable de réaliser: http://linux.die.net/man/3/scanf
(Il est vrai que la documentation de cette fonction est un peu indigeste).