printf pas d'impression sur console
Je suis débutant dans ce langage C. Je suis à l'aide d'eclipse (juno) que mon IDE et installé le plugin CDT. J'ai aussi déballé mingw64 (Compilateur GCC). J'ai écrit un programme très simple pour voir si elle fonctionne. C'est mon code:
#include <stdio.h>
int main()
{
int age;
printf("Hello, please enter your age:\n");
scanf("%d", &age);
printf("Your age is %d", age);
return 0;
}
Le problème, c'est que le tampon de sortie est rempli avec la valeur de la chaîne de la première printf
mais n'a pas de sortie vers la console. - Je entrer un nombre, et seulement alors, le tampon se déverse toutes les données de la console donc je vois la console quelque chose comme ceci:
1
Hello, please enter your age:
Your age is 1
au lieu de ce qui est attendu c'est:
Hello, please enter your age:
1
Your age is 1
Maintenant, j'ai trouvé que je peux utiliser fflush(stdout)
après la première printf
mais je ne pense pas que cette solution est à la fois élégante et même nécessaire. Des idées sur comment je peux surmonter cela?
MODIFIER - parce que j'apprends dans mon université, je ne peux pas utiliser tout ce qui n'est pas appris dans le cours afin que je puisse seulement utilisation printf
et scanf
NOUVELLE ÉDITION de - je pense avoir trouvé une explication pour cela. Comme je l'ai dit, je suis sortie sur la console de la vue à l'intérieur de l'Éclipse. La chose étrange est que si j'ai compiler et exécuter le programme à partir de la ligne de commande de Windows, j'obtiens le résultat voulu. Donc, je pense que eclipse est en train d'écrire le résultat dans un fichier et de le présenter sous la fenêtre de la console. Comment puis-je la force de l'éclipse à ouvrir une véritable fenêtre de ligne de commande dans ma course configurations?
- Note de côté, il n'y a rien de mal avec un
fflush()
, ils peuvent être très utiles - C'est très étrange comportement, l' \n devriez rincer
stdout
- double possible de Pourquoi ne printf pas rincer après l'appel, à moins d'un retour à la ligne est dans la chaîne de format?
- ce n'est pas un doublon car je ne peux pas utiliser le
fflush
oufprintf
fonctions. Quand je lance la gcc en ligne de commande dans windows, j'obtiens le bon résultat donc je soupçonnent un cas de mauvaise configuration eclipse. Toutes les idées qui les configurations?
Vous devez vous connecter pour publier un commentaire.
De sortie est mis en mémoire tampon.
stdout est la ligne de tampon par défaut, ce qui signifie que le '\n' est censé vider la mémoire tampon.
Pourquoi est-il ne se passe pas dans votre cas? Je ne sais pas. Besoin de plus d'info à propos de votre application/environnement.
Cependant, vous pouvez contrôler la mise en mémoire tampon avec setvbuf():
Cette force stdout être mis en mémoire tampon.
Cette force stdout être sans tampon, de sorte que vous n'aurez pas besoin d'utiliser fflush().
Notez qu'il va sérieusement affecter les performances de l'application si vous avez beaucoup de tirages.
tee
ou même d'écrire de la borne de sortie à un fichier, je ne reçois rien.Apparemment c'est un bug connu d'Éclipse. Ce bug est résolu avec la résolution de l'HABITUDE-FIX. Je n'ai aucune idée de la raison de bien. voici le lien:
Eclipse C De La Console Bug.
Essayer de définir cette option avant de l'imprimer:
Vous pourriez essayer d'écrire sur la sortie stderr, plutôt que sur la sortie standard stdout.
Vous devriez aussi jeter un oeil à cette thread pertinent.
printf
etscanf
). pour la même raison, je ne peux pas utiliser fflush.Comme d'autres l'ont souligné, les sorties peuvent être mis en mémoire tampon à l'intérieur de votre programme avant de la console ou de la carapace a une chance de le voir.
Sur les systèmes de type unix, y compris les ordinateurs mac,
stdout
a la ligne de base de mise en mémoire tampon par défaut. Cela signifie que votre programme se vide de sesstdout
tampon dès qu'il voit un retour à la ligne.Cependant, sur les fenêtres, les retours à la ligne ne sont plus spécial, et la pleine mise en mémoire tampon est utilisée. Windows n'a pas une ligne de support de mise en mémoire tampon à tous; voir la page msdn sur setvbuf.
Donc sur windows, une bonne approche est de couper complètement
stdout
de mise en mémoire tampon de la sorte:Ajouter
c:\gygwin\bin
àPATH
variable d'environnement, soit comme une variable d'environnement système ou dans votre projet eclipse (propriétés-> run/debug-> modifier)Après la construction du projet, clic droit sur le projet de Débogage > “Debug Configurations”, comme indiqué ci-dessous
Dans le “debugger” onglet, assurer la “commande GDB fichier” maintenant des points à votre “.gdbinit de fichier”. Sinon, entrez le chemin d'accès à votre “.gdbinit” fichier de configuration :
Cliquez sur “Appliquer” et “Debug”. Originaire de ligne de commande DOS devrait être lancée, comme indiqué ci-dessous