Si j'entre str1 code> plus long que la longueur 10, le reste de celui-ci reste dans le tampon et est entré dans mon str2 code>. Comment effacer le tampon avant str2 code>, donc je peux le saisir?
3 Réponses :
après ceci effacerait le tampon d'entrée après "str1" est lu. P> Votre code doit donc être P> fgets (str1,10, stdin); code> do #include <stdio.h>
int main()
{
char str1[10];
char str2[10];
int c;
str1[0]=0;
str2[0]=0;
fgets(str1,10,stdin);
if( (str1[0]!=0) && (!strrchr(str1,'\n')) )
while((c = getchar()) != '\n' && c != EOF);
fgets(str2,10,stdin);
puts(str1);
puts(str2);
return 0;
}
Et s'il y a un '\ n' code> dans les 10 premiers caractères de l'entrée?
@Jimbalter merci de le pointer. Fait la modification nécessaire.
Néanmoins, vous ne testez pas le retour de fgets code>; Vous pouvez accéder à un str1 code> (par exemple pour une entrée vide).
@Jens merci pour la tête. Corrigé ça.
@Nithinbhaskar est que `; `Après une boucle intentionnelle? clair moi si je manque quelque chose de stupide ici
@Bingo le ';' provoquera le programme de boucle à plusieurs reprises dans la boucle de While tant que la condition est satisfaite. Dans ce code, cela garantira que les caractères restants dans la mémoire tampon après 'STR1' sont lus seront rincés du tampon.
@Nithinbhaskar oopps je le prenais dans une autre façon depuis des années :) merci et vous avez déjà précipité votre +1
@Bingo renvoie ce lien pour plus d'infos Stackoverflow.com/questions/8706139/...
#include <stdio.h>
#define MAX_LEN 9
#define READBUF_LEN 4092
int main(void)
{
char str1[MAX_LEN+1];
char str2[MAX_LEN+1];
char readbuf[READBUF_LEN+1];
fgets(readbuf,READBUF_LEN,stdin);
strncpy(str1, readbuf,MAX_LEN);
str1[MAX_LEN]='\0';
fgets(readbuf,READBUF_LEN,stdin);
strncpy(str2, readbuf,MAX_LEN);
str2[MAX_LEN]='\0';
puts(str1);
puts(str2);
return 0;
}
Yeah, I know, what if someone enters more than 4092 characters... There's a big chance of that happening.
Une manière différente: éviter les fgets () et lire des caractères un par un. Cela vous permet de gérer toutes les conditions à l'intérieur d'une boucle:
Je l'ai essayé plus tôt, cela ne fonctionnait pas.
@jamesdlin désolé si j'avais tort. Pouvez-vous expliquer comment?
fflush code> n'est pas défini pourstdin code>. Voir C-FAQ.com/STDIO/STDINFLUSH.HTML et c-faq.com/stdio/stdinflush2.html