我有一个二维数组,我想要打印到visual studio的输出以查看每次修改时的结果,我尝试使用std::cout
但它没有工作,如果我使用CCLOG
,该函数会在每次调用时自动写一个换行符并且它不是二维数组的解决方案,我也尝试CClog
不确定与{{1}的区别但这次它甚至会产生编译错误:(
就像我希望输出为:
CCLOG
以下是我的尝试:
1,2,4,4,5
5,5,4,3,0
4,4,4,4,7
6,6,6,6,6
如何用coco2dx做到这一点?
答案 0 :(得分:1)
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