如何在运行时禁用cout输出?

时间:2015-05-12 07:58:19

标签: c++ cout

我经常在我的代码中的许多不同位置使用cout进行调试,然后我感到沮丧并手动评论所有这些内容。

有没有办法在运行时抑制cout输出?

更重要的是,假设我想要抑制所有cout输出,但我仍然希望在终端中看到1个特定输出(假设程序的最终输出)。

是否可以使用“”其他方式“打印到终端以显示程序输出,然后在抑制cout时仍然可以看到使用此”其他方式“打印的内容?”

6 个答案:

答案 0 :(得分:58)

当然,你可以(example here):

int main() {
    std::cout << "First message" << std::endl;

    std::cout.setstate(std::ios_base::failbit);
    std::cout << "Second message" << std::endl;

    std::cout.clear();
    std::cout << "Last message" << std::endl;

    return 0;
}

输出:

First message
Last message

这是因为将流置于fail状态会使其静默地丢弃任何输出,直到故障清除被清除。

答案 1 :(得分:16)

不要使用cout进行调试,而是定义调用它的不同对象(或函数或宏),然后可以在一个地方禁用该函数或宏。

答案 2 :(得分:16)

要抑制输出,可以断开底层缓冲区与cout的连接。

#include <iostream>

using namespace std;

int main(){

    // get underlying buffer
    streambuf* orig_buf = cout.rdbuf();

    // set null
    cout.rdbuf(NULL);

    cout << "this will not be displayed." << endl;

    // restore buffer
    cout.rdbuf(orig_buf);

    cout << "this will be dispalyed." << endl;

    return 0;
}

答案 3 :(得分:4)

您可以使用cerr - 出于调试目的的错误的标准输出流。

此外,还有clog - 用于记录的标准输出流。

通常,它们都表现得像cout

示例:

cerr << 74 << endl;

详细信息:http://www.cplusplus.com/reference/iostream/cerr/

http://www.cplusplus.com/reference/iostream/clog/

答案 4 :(得分:0)

您似乎打印调试消息。您可以在Visual C ++ / MFC中使用TRACE,或者您可能只想创建一个Debug()函数来处理它。只有在设置了不同的标志时,才能将其实现为打开状态。许多程序使用名为verbose-v的命令行参数来控制日志和调试消息的行为。

答案 5 :(得分:0)

如果您包含涉及 #include <stdlib.h> #include <stdio.h> typedef struct avion { int code; int capacite; char etat[1]; int date; int nvols; } avion; typedef struct element { avion A; struct element *svt; } element; typedef struct element list; list *modifier(list* av) { list *p=av; int c; printf("\n------------La Modification--------------\n"); printf("\nDonner le code de l'avion que vous voulez modifier...: "); scanf("%d", &c); while (av!=NULL) { if (av->A.code == c) { printf("\nL'avion existe dans la liste..."); printf("\nDonner le nouveau code: "); scanf("%d", &av->A.code); printf("\nDonner la nouvelle capacite...: "); scanf("%d", &av->A.capacite); printf("\nDonner le nouveau etat...: "); scanf("%s", av->A.etat); printf("\nDonner la nouvelle date de fabrication...: "); scanf("%d", &av->A.date); printf("\nDonner le nouveau nombre de vols assures...: "); scanf("%d", &av->A.nvols); return p; } p = p->svt; } return NULL; } 的文件,您可能希望在开始时(在 main 之外)编写代码,可以这样做:

cout