Probleme de verification chaine de caracteres

stroke599 Messages postés 21 Date d'inscription jeudi 30 mai 2013 Statut Membre Dernière intervention 25 février 2017 - 19 oct. 2013 à 09:29
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 20 oct. 2013 à 21:46
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
20 oct. 2013 à 21:46
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).
0
Rejoignez-nous