7
votes

Aucune sortie de console sur la cout

Bonjour,

J'ai un problème avec Eclipse IDE pour les développeurs C / C ++.

J'écris un outil SMAL pour la conversion de chaînes. Tout en testant sur un point Eclipse s'est arrêté pour donner la sortie de la console . E.g.:
COUT << "test";
ne s'affiche pas.

Mais ce n'est pas tous les endroits où ... Un autre exemple: xxx

Le message d'erreur est affiché correctement si l'argument est manquant si l'argument est manquant. . Mais si l'argument est là et que le programme continue les sorties de test:

COUT << "TEST";
COUT << "TEST2";

ne sont pas affichés ...
Il me manque quelque chose d'évident?

merci d'avance!


7 commentaires

Je n'ai pas utilisé Eclipse, mais êtes-vous sûr que votre code fonctionne bien. Si par hasard, il se bloque à la ligne 'CommandConverter A (ARGV [1]);', et vous n'êtes pas informé de l'accident, vous ne verrez aucune sortie.


Que se passe-t-il si vous exécutez la ligne de commande?


Je ne cours pas ATM uniquement sur Commandline ... mais cela faisait cela à travers la console Eclipse ... devrait être la même chose n'est-ce pas? - Le code ne plante pas là-bas ... Cela fait beaucoup plus tard ... Pour une analyse plus poussée, j'ai besoin de la sortie. Si je débobile et passez ce point simplement rien ne s'affiche: /


Essayez de changer le COUT vers CERR , voir si vous voyez la sortie.


Idem ... rien ne se passe ... Je suis sur Google, un gars avait la même chose. Sa solution utilisait une autre version Eclipse, j'ai également essayé cela aussi, sans succès: /


Et si vous exécutez ceci dans gdb, écrivez-vous les déclarations ?


la solution est l'ENDL; À la fin ... voir la réponse ci-dessous


7 Réponses :


12
votes

Vous devez mettre fin aux chaînes de sortie avec Newline, par exemple: `Cout << Test \ n" ``. La raison est que la sortie standard est tamponnée et que le tampon est rincé sur la nouvelle ligne. Il existe probablement un moyen de rincer le tampon COUT sans délivrer une nouvelle ligne, mais je ne le connais pas par cœur. Inclut probablement l'accès au Streambuf sous-jacent (via la méthode RDBUF).


7 commentaires

Avez-vous essayé avec std :: endl comme Ismail dit? C'est en fait censé rincer le tampon de sortie. '\ n' n'est pas.


Ok avec cela ça marche ... Mais ça n'a toujours pas de sens pour moi ... pourquoi ça marche avant? ON: COUT << "ERREUR: Mauvaise quantité d'arguments! Un seul autorisé ... \ n";


@Beasly, car la sortie est rinçue sur le système d'exploitation, et lorsque votre programme quitte votre programme, le système d'exploitation s'occupe de rincer les tampons (c'est-à-dire l'affichage de la console). La raison pour laquelle le endl corrige votre problème est celui-ci ainsi que de rincer au système d'exploitation, les tampons OS May sont flushés, raison que j'ai posé des questions sur l'étape À travers le GDB, c'est que compter sur COUT S pour débogage est une approche assez fondamentale et sujette à des situations telles que celle que vous avez rencontrée, en passant avec un débogueur, est une meilleure approche pour déterminer si quelque chose fonctionne ou si ne pas...


Merci d'avoir expliqué, les choses deviennent plus claires maintenant :) En fait, je débogage ... Mais à un moment donné, je n'étais pas sûr que des mesures sont vraiment passées, c'est pourquoi je veux mettre des couples sur le débogage :)


"Il existe probablement un moyen de rincer le tampon COUT sans émettre une nouvelle ligne, mais je ne le sais pas par cœur." => << Flush (non difficile de se rappeler vraiment)


Travaillé pour moi comme charme. Merci!


Ne fonctionne pas pour moi, j'ai également appelé explicitement pour flush () , et il n'imprime toujours rien



1
votes

J'ai eu un problème similaire. Dans mon cas, le programme donnerait une sortie si elle est exécutée à partir de la ligne de commande mais non de la console Eclipse. La solution consistait à utiliser la version 32 bits d'Eclipse et non le 64 bits.

J'ai lu que c'était un bug. Pourrait ne pas être le même problème cependant.


0 commentaires

-4
votes

Essayez de sortir un espace au début de chaque ligne

COUT << "" << .....


0 commentaires

3
votes

Pour moi, installez les versions 32 bits d'Eclipse (Indigo 3.7) et le JDK / JRE 32 bits n'a pas fonctionné. J'utilise la solution beaucoup plus rapide de la Eclipse CDT / User / FAQ FORT>:

Devis de Eclipse CDT / User / FAQ - Console Eclipse ne montre pas la sortie sur Windows : P>

Console Eclipse ne montre pas la sortie sur Windows à Eclipse CDT sur Windows, sortie standard du programme étant exécuté ou débogué est pleinement tamponné, car il n'est pas connecté à une console Windwos, mais à un tuyau. Voir Bug 173732 pour plus de détails. Soit ajouter des appels fflush après chaque impression ou ajoutez les lignes suivantes au début de la principale Fonction: p>

setvbuf(stdout, NULL, _IONBF, 0); 
setvbuf(stderr, NULL, _IONBF, 0);


1 commentaires

Cette solution de contournement de Windows fonctionne également pour Eclipse 3.8 64 bits avec CDT 6.0 sur Ubuntu 12.10 64 bits.



0
votes

Je cherchais également exactement ces informations quand j'ai trouvé ceci sur le site Web de Microsoft http://support.microsoft.com/kb/94227

Je pense une méthode simple est d'utiliser STD :: Flush lorsque vous souhaitez forcer la rinçage du tampon interne que COUT utilise P>

*std::cout << ... << std::flush;*


0 commentaires

0
votes

Cela se produit lorsque vous déboguez votre code et que vous ne voyez pas la sortie jusqu'au dernier. Utilisez xxx

pour voir la sortie immédiatement sur stdout (console)


0 commentaires

-2
votes

Salut après une lutte similaire, j'ai compris que le premier élément de la variable de chemin d'environnement des propriétés du projet doit être "C: \ Mingw \ bin;" Sinon, une mauvaise version peut être utilisée, surtout si vous utilisez un compilateur différent.


0 commentaires