Ben non. Tu n'as rien purgé du tout. Si on ne sait pas utiliser scanf(), le mieux est d'apprendre à le faire ou de ne pas l'utiliser.Citation:
Envoyé par kamouminator
Version imprimable
Ben non. Tu n'as rien purgé du tout. Si on ne sait pas utiliser scanf(), le mieux est d'apprendre à le faire ou de ne pas l'utiliser.Citation:
Envoyé par kamouminator
La norme dit que le comportement de fflush() n'est défini que pour les flux sortants. Or stdin est à l'évidence un flux entrant. Le comportement n'est donc pas défini. C'est tout. Le code est donc incorrect.Citation:
Envoyé par kamouminator
Le fait que 'ça marche' est une des possibilité d'un comportement indéfini. Ca ne signifie pas que le code est correct.
(En fait, sous Linux, "ça ne marche pas" et des cas de plantages ont été rapportés).
j'essaye donc de la même façon de ne prendre qu'une chaine de caractères minuscules dans la variable chaine
mais il me retourne une erreur de segmentation et il accepte n'importe quelle chaîne...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 int saisie(){ char chaine[30]; int ok = 0; int retour; printf("Chaine en minuscules à inserer ? \n"); while ( !ok ){ retour = scanf("%s%[a-z][^\n]", chaine); printf("retour : %d\n", retour); if ( !retour ){ /* erreur de saisie, on vide le flux */ int c; while ( ((c = getchar()) != '\n') && c != EOF); printf("Perdu, il faut rentrer uniquement des minuscules ! \n"); printf("Une autre chance ? \n"); } else { /* reussite de la saisie */ getchar(); /* on enleve le '\n' restant */ printf("saisie acceptee\n"); ok = 1; /* sort de la boucle */ printf("%s", chaine); } } return 1; }
C'est normal que tu ne limites pas la taille ?
la taille de la chaine ?
Oui. Je ne vois rien pour la limiter dans le scanf()...
PS: Tu as sûr qu'il faut deux "%" dans le format ?
Je vois 2 "%" et 1 variable... C'est là que ça dépasse ma compréhension et que j'utilise fgets(), islower() etc.Citation:
Envoyé par tomasi
en testant la valeur de sortie ?
je peut utiliser islower pour convertir des majuscules si jamais l'utilisateur en rentre mais que faire pour les autres caractères ? (entiers, ect...)
kékidi ?Citation:
Envoyé par tomasi
8O 8O 8O islower() ne convertit rien. Il teste. Pour convertir, c'est tolower()...Citation:
je peut utiliser islower pour convertir des majuscules
C'est trop pour mon neurone, là. Ca part dans tout les sens...Citation:
si jamais l'utilisateur en rentre mais que faire pour les autres caractères ? (entiers, ect...)
Alors 1 problème à la fois. Que veux-tu faire exactement ?
tester si la chaine rentrée par l'utilisateur est bien une chaine de caractères minuscules
tester si on a aucune majuscule (on considere qu'on peut avoir des caracteres speciaux):
Code:
1
2
3
4
5
6
7
8
9
10 int IsMaj(char *str) { for (int i = 0; str[i]; i++) { if (str[i]>= 'A' && str[i] <= 'Z') return (-1); } return (1); }
Bonjour,
je vais rajouter mon grain de sel
Pour les fainéant de mon genre:Code:
1
2
3
4
5
6
7
8
9 int isLowerStr(const char *s) { while (*s && islower(*s)) { s++; } return (*s == 0); }
on utilise de cette manière:Code:
1
2
3
4
5
6
7
8 int checkCharTypeStr(const char *s, int (*ctype)(char)) { while (*s && ctype(*s)) { s++; } return (*s == 0); }
Code:
1
2
3
4
5 char *text = "le papa de marie fume la pipe"; checkCharTypeStr(text, islower); checkCharTypeStr(text, isalpha);
Pas portable. Il y a isupper() pour ça...Citation:
Envoyé par toxycyty
Une boucle avec islower() de <ctype.h>Citation:
Envoyé par tomasi
merci la vérification fonctionne bien