Ce code demande à l'utilisateur des données et par la suite un numéro:Comment empêcher l'utilisateur d'entrer plus de données que la limite maximale?
$ cat read.c
#include<stdio.h>
#include<stdlib.h>
#define MAX 10
int main() {
char* c = (char*) malloc(MAX * sizeof(char));
int num;
printf("Enter data (max: %d chars):\n", MAX);
fgets(c, MAX, stdin);
// how do I discard all that is there on STDIN here?
printf("Enter num:\n");
scanf("%d", &num);
printf("data: %s", c);
printf("num: %d\n", num);
}
$
Le problème est que, en dehors de l'instruction qui indique le nombre maximum de caractères, il n'y a rien qui empêche l'utilisateur d'entrer plus, ce qui est ensuite lu dans num
comme indésirable:
$ ./read
Enter data (max 10 chars):
lazer
Enter num:
5
data: lazer
num: 5
$ ./read
Enter data (max 10 chars):
lazerprofile
Enter num:
data: lazerprofnum: 134514043
$
est-il un moyen de rejeter tout ce qui est là STDIN
après l'appel fgets
?
Triste mais vrai. Modifié! – spstanley
C'est mieux. '-1' enlevé – pmg
il devrait être' fgets (c, MAX + 1, stdin) 'pas' MAX'. et 'fgets (n, sizeof (n), stdin)' au lieu de 'sizeof (n) - 1'. lisez le manuel de 'fgets' – user102008