J'utilise Eclipse pour coder en C/C++ et je me bats avec ce qui pourrait être quelque chose d'assez facile. Dans mon code ci-dessous, j'utilise printf()
et après scanf()
. Althougth printf
est écrit avant scanf()
la sortie diffère. J'ai pu découvrir quelque chose sur un problème similaire ici . Mais je n'ai pas pu le résoudre. Des idées?
Code:
#include <stdio.h>
int main()
{
int myvariable;
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Production attendue:
Enter a number:1
1
Au lieu de cela, je reçois:
1
Enter a number:1
Votre sortie est mise en mémoire tampon. Vous avez 4 options:
chasse explicite
fflush
après chaque écriture pour profiter du tampon et toujours appliquer explicitement le comportement/affichage souhaité.
fflush( stdout );
avoir le tampon uniquement en termes de lignes de tampon
utile lorsque vous savez qu'il suffit d'imprimer uniquement des lignes complètes
setlinebuf(stdout);
désactiver le tampon
setbuf(stdout, NULL);
désactiver la mise en mémoire tampon dans votre console via le menu d'options qu'il fournit
Voici votre code avec l'option 1:
#include <stdio.h>
int main() {
int myvariable;
printf("Enter a number:");
fflush( stdout );
scanf("%d", &myvariable);
printf("%d", myvariable);
fflush( stdout );
return 0;
}
En voici 2:
#include <stdio.h>
int main() {
int myvariable;
setlinebuf(stdout);
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
et 3:
#include <stdio.h>
int main() {
int myvariable;
setbuf(stdout, NULL);
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Ok, donc finalement j'ai utilisé quelque chose de similaire à ce que @zsawyer a écrit comme une option intitulée 3. Dans mon code, j'ai inséré cette ligne:
setvbuf(stdout, NULL, _IONBF, 0);
En première ligne dans main ():
#include <stdio.h>
int main()
{
setvbuf(stdout, NULL, _IONBF, 0);
int myvariable;
printf("Enter a number:");
scanf("%d", &myvariable);
printf("%d", myvariable);
return 0;
}
Je l'ai obtenu de ici .
Rapide et indolore, j'ai juste défini une macro nommée "eprint" pour ajouter un flush () après avoir appelé printf (...) et j'utilise juste la macro eprint ci-dessous:
#define eprintf(...) printf(__VA_ARGS__); \
fflush(stdout); \
#include <stdio.h>
#include <stdlib.h>
#define eprintf(...) printf(__VA_ARGS__); \
fflush(stdout); \
int main(void) {
int a;
eprintf("a=");
scanf("%d",&a);
eprintf("I've read value %d.\n",a);
return EXIT_SUCCESS;
}
a=5
I've read value 5.
PS: Je viens de perdre 30 minutes à rechercher ce problème de console Eclipse et les correctifs possibles, et celui-ci semble être le plus simple et le plus facile à comprendre pour quiconque recherche une telle chose.