Message d'erreur

Fermé
marie12 - 14 mars 2019 à 13:02
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 15 mars 2019 à 12:41
Bonjour,
j'aimerai savoir comment afficher un message d'erreur en c ,l'utilisateur ne doit introduire que des mots de taille n et qui contiennent que des lettres d'alphabets .
merci,


Configuration: Windows / Chrome 72.0.3626.121

2 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 14 mars 2019 à 14:25
Salut marie12,

Pour afficher un message d'erreur en C, tu le fais en principe sur le flux stderr, comme ceci :

fprintf(stderr, "Erreur: seuls des mots de taille %d et ne "
        "contenant que des lettres de l'alphabet sont permis\n", n);

Si ta question porte sur autre chose, peux-tu en dire plus ?


Dal
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 14 mars 2019 à 14:53
Rebonjour marie12,

Si ce que tu veux c'est contrôler que la saisie de l'utilisateur remplit certaines conditions que tu as posées, ou qui te sont imposées, ta question est mal formulée.

Tu peux contrôler la taille de la saisie (s'il s'agit bien d'une saisie au clavier) de plusieurs façons. Une façon de faire qui te permettra facilement de vérifier si le nombre exact de
char
attendus ont été saisis est de gérer la saisie avec
fgets()
dans un tableau de
char
correctement dimensionné pour contenir la taille que tu attends y compris le
'\n'
résultant de la validation par l'utilisateur et le caractère terminateur de chaîne
'\0'
. Il suffit alors de vérifier que l'avant dernière position du tableau en question contient bien
'\n'
.

Cela est rendu possible par le fonctionnement de
fgets()
:

http://www.cplusplus.com/reference/cstdio/fgets/

Pour vérifier si la saisie ne contient que des caractères alphabétiques, tu pourrais te servir de
isalpha()
qui est une fonction standard du C accessible par l'entête ctype.h

http://www.cplusplus.com/reference/cctype/isalpha/

Ce sont des exemples sans connaître d'avantage le contexte de ce que tu fais, comment et pourquoi, car tu ne donnes pas de détails.

Poste ton code si tu as des questions précises.

Dal
0
alors bonjour dal et merci pour ta réponse, je veux demander a l'utilisateur d'introduire une suite de mots dans chaque mot je dois vérifier qu'il y'a n caractères et que tous les caractères sont des lettres de l'alphabet. alors déjà j'ai pu me débrouiller pour vérifier mes conditions puis par la suite afficher mon message d'erreur. sauf que voila moi je veux continuer d'afficher un des deux messages d'erreur (soit pour le nombre de caractères soit pour les les lettres de l'alphabet) jusqu’à ce que les conditions soient a 100% vérifiées et a chaque fois en cas d'erreur je demande a l'utilisateur d'introduire un nouveau mot que je dois de nouveau contrôler . Mais moi je procède comme suit: je vérifie d'abord le nombre de caractères puis si c'est des lettres de l'alphabet, mais en suivant cet ordre si il y'a une erreur dans le nombre de caractères un message d'erreur sera affiché si l'erreur est rectifiée et que l'utilisateur introduit par la suite un autre mot contenant des caractères spéciaux un autre message d'erreur apparaîtra mais si pour corriger l'erreur il introduit un autre mot contenant que des lettre de l'alphabet MAIS de taille différente de n la aucun message n’apparaîtra et le mot sera lu le plus normalement possible.
merci encore de m'aider !
0
j'ai aussi pensé a la récursivité que je ne maîtrise pas du tout d'ailleurs ça ne marche pas

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test_alpha(char marie[],int taille)
{
int i=0;

while(isalpha(marie[i])!=0)
{
i++;
}
if (i<taille)
{
printf("erreur , faites entrer un autre mot \n");
scanf("%s",&marie);
test_alpha(marie,taille);
}
}
int main()
{ char marie[4];
printf("faites entrer votre mot \n");
scanf("%s",&marie);
test_alpha(marie,4);
return 0;
}


je pourrai utiliser la récursivité et obliger l'utilisateur a introduire n caractères ni plus ni moins mais comment?
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 15 mars 2019 à 13:09
tu peux faire ton algorithme simplement comme ceci :
1- demander une saisie faisant exactement n caractères et ne comprenant que des caractères alphabétiques
2- vérifier si la saisie fait exactement n caractères, sinon afficher une erreur "votre saisie ne remplit pas les critères" et repartir sur 1
3- vérifier si la saisie ne comporte que des caractères alphabétiques, sinon afficher une erreur "votre saisie ne remplit pas les critères" et repartir sur 1

Ton code pour vérifier que les caractères sont alphabétiques n'a pas besoin de récursivité. Il suffit d'une boucle.

Ton code ne limite pas la saisie à n caractères au plus. Je t'ai indiqué comment faire en récupérant la saisie avec fgets (à utiliser dans ce cas avec stdin) ... là tu utilises scanf, et d'une façon qui ne te permet pas de limiter la saisie et aboutira à un débordement du tampon mémoire si l'utilisateur est indiscipliné et tape plus de caractères qu'on ne lui demande.

Vois ce post récent sur le forum sur fgets et stdin : https://forums.commentcamarche.net/forum/affich-35909535-comprendre-l-usage-de-stdin

Dal
0