Comment libérer de la mémoire tampon d'entrée après fgets débordement?
Je suis confronté à un petit problème avec fgets lorsque la chaîne d'entrée dépasse sa limite prédéfinie.
En prenant l'exemple ci-dessous:
for(index = 0; index < max; index++)
{printf(" Enter the %d string : ",index+1)
if(fgets(input,MAXLEN,stdin))
{
printf(" The string and size of the string is %s and %d \n",input,strlen(input) + 1);
removeNewLine(input);
if(strcmp(input,"end") != 0)
{ //Do something with input
}
}
Maintenant, quand je dépasse la longueur MAXLEN et de saisir une chaîne de caractères, je sais que l'entrée d'ajouter un '\0' à MAXLEN -1 et que serait-il. Le problème survient lorsque j'essaie d'entrer dans la 2ème chaîne qui n'est pas demandé-je.e
Output :
Enter the first string : Aaaaaaaaaaaaaaaaaaaa //Exceeds limit
Enter the second string : Enter the third string : ....Waits input
Alors, j'ai pensé que je devrais effacer la mémoire tampon de façon standard comme en C. Il attend jusqu'à ce que je entrer
return
deux fois, La première fois étant ajouté à la chaîne et la prochaine fois,attendons plus d'entrée avec un autre retour.
1. Existe t'il une méthode par laquelle je peux effacer le tampon sans entrer dans le retour supplémentaire?
2. Comment puis-je mettre en œuvre la gestion des erreurs pour la même chose? Parce que le fgets valeur de retour sera Non nulle, et que strlen(entrée) me donne l'acceptés taille de la chaîne par fgets, ce qui devrait être fait?
Merci beaucoup
Je vais revenir. Désolé!
merci de ne pas revenir , pour l'instant, la question semble à ce que vous...
OriginalL'auteur Hooli | 2013-08-21
Vous devez vous connecter pour publier un commentaire.
Si j'ai bien compris, vous voulez éviter le double entrée de presse, lors de la saisie d'entrée est dans la plage.
Un travail autour de serait
Avec une limitation qu'il demandera à nouveau deux fois enter lorsque les caractères saisis sont exactement MAXLEN-2.
Ou bien vous pouvez simplement le formulaire de votre
input
à l'aide de caractère par caractère en entrée.dire votre
MAXLEN
est de 10 , si vous entrezabcdefgh
etENTER
il sera de nouveau attendre un autreENTER
Il n'est pas et pourquoi devrait-il? Je suis entré dans une chaîne de caractères, et si c'est la longueur de la chaîne est égale à 9 excluant le caractère null,bien sûr, il est possible que la chaîne a débordé. Le code à charge ici de problème lié à '\n' qui est pourquoi ses pas l'attente? Consulter le code ci-dessus. Merci!
Eh bien, pour votre cas
fflush(stdin)
devrait fonctionner très bien. Mais son utilisation est fortement déconseillée car elle peut conduire à l'UB sur certains C mise en œuvre.while((ch = getchar())!='\n' && ch != EOF );
est utilisé à la place.OriginalL'auteur P0W
ou:
Flush
la mémoire tampon d'entrée?"Je pense que l'OP a déjà essayé ce ",//Une tentative d'effacer la mémoire" Et il veut éviter la double entrée de la presse, lors de la saisie d'entrée n'est pas déborder
Ce code doit être juste passer à après l'appel à
fgets
, pas avant, et ne doit être appelée que si la mémoire tampon rempli parfgets
n'a pas de fin en'\n'
.OriginalL'auteur R..