我经常在我的代码中的许多不同位置使用cout
进行调试,然后我感到沮丧并手动评论所有这些内容。
有没有办法在运行时抑制cout输出?
更重要的是,假设我想要抑制所有cout
输出,但我仍然希望在终端中看到1个特定输出(假设程序的最终输出)。
是否可以使用“”其他方式“打印到终端以显示程序输出,然后在抑制cout时仍然可以看到使用此”其他方式“打印的内容?”
答案 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;
答案 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