我有一个二维数组,我想将其打印到Visual Studio的输出中,以便每次修改时都能看到结果,我尝试使用std::cout
,但它不起作用,如果使用CCLOG
,该函数将自动每次都写一个换行符,这不是一个二维数组的漂亮解决方案,我也尝试CClog
不确定CCLOG
有什么区别,但是这次甚至给出了编译错误:(
就像我想要的输出是:
1,2,4,4,5
5,5,4,3,0
4,4,4,4,7
6,6,6,6,6
这是我尝试过的:
void HelloWorld::PrintBrickArray() {
CCLOG("will print brick array");
std::cout << "===Begin of Array ====" << std::endl;
for (int i = 0; i < MATRIX_Y; i++) {
for (int j = 0; j < MATRIX_X; j++) {
//CCLog("%d", this->brickArray[i][j]);
std::cout << this->brickArray[i][j] << ' ';
}
std::cout << std::endl;
}
std::cout << "*****END OF Array *****" << std::endl;
std::cout.flush();
}
如何用coco2dx做到这一点?
最佳答案
CCLOG
或cocos2d::log
使用Visual Studio的“调试”窗口,这与在std::cout
工作的控制台上进行写入不同。
因此,有两种方法可以解决您的问题:使用std::cout
写入控制台或使用与CCLOG
不同的方法写入输出窗口
首选,您必须将项目类型从Win32 Application Project更改为Win32 Console Project。这是Visual Studio的处理方式,在大多数情况下,您的项目是通过cocos2d的控制台自动创建的。您可以看到this post。我不建议采用这种方式IMO。
第二选择,使用您自己的代码编写讨论here的输出。
还有另一种方法,您可以使用std::string
和std::ostringstream
将变量“打印”到缓冲区,然后通过CCLOG
将字符串打印到输出窗口。CCLOG
稍微包装了一下代码,以方便我们在运行时通常记录资源检查,错误,文件处理等情况。如果不是这种情况,则可能应该设置断点以查看值是什么。
编辑:由于您选择了第二种方法,所以我建议使用std::ostringstream
而不是sprintf
,并使用CCLog
而不是OutputDebugString
(因为您只需将其打印出来并使用独立的OS,不需要额外的参数)
这是一个示例代码:
#include <vector>
#include <sstream> // for ostringstream
#include <Windows.h> // for OutputDebugStringA
using namespace std;
int main(void)
{
// Assuming that you have this 2d array
vector< vector<int> > arr2d;
arr2d.push_back({ 2,2,1,4 });
arr2d.push_back({ 2,4,1,5 });
arr2d.push_back({ 2,4,7,2 });
arr2d.push_back({ 3,2,0,1 });
ostringstream buffer;
for (int i = 0; i < arr2d.size(); i++)
{
for (int j = 0; j < arr2d[i].size(); j++)
{
buffer << arr2d[i][j] << '\t';
}
buffer << endl;
}
// Assuming that you use OutputDebugString for windows-only
//OutputDebugStringA(buffer.str().c_str());
// I recommend this
cocos2d::log(buffer.str().c_str());
return 0;
}
现在,
buffer
的工作原理与cout
几乎相同,只是“打印”以缓冲,然后您可以使用str()
获得一个。但是cocos2d::log
使用C样式的字符串,因此c_str()
将解决此问题进一步了解
std::ostringstream
here