C / C++ printf () avant le problème scanf()
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 {[5] } est écrit avant scanf()
la sortie diffère. J'ai pu trouver quelque chose sur un problème similaire ici. Mais je n'étais pas en mesure de 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;
}
Résultats escomptés:
Enter a number:1
1
Au lieu de cela, je reçois:
1
Enter a number:1
2 réponses
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 desiredbehavior/display.fflush( stdout );
-
Avoir le tampon uniquement les lignes de tampon-Sage
Utile lorsque vous savez qu'il suffit d'imprimer uniquement les lignes complètes
setlinebuf(stdout);
-
Désactiver le tampon
setbuf(stdout, NULL);
-
Désactiver la mise en mémoire tampon dans votre console via quoi toujours le menu options qu'il fournit
Exemples:
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;
}
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 étiquetée 3. Dans mon code, j'ai inséré cette ligne:
setvbuf(stdout, NULL, _IONBF, 0);
Comme 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 eu de ici .