如何在 cocos2dx 中打印二维数组
Posted
技术标签:
【中文标题】如何在 cocos2dx 中打印二维数组【英文标题】:How to print a two dimensional array in cocos2dx 【发布时间】:2017-08-21 10:29:37 【问题描述】:我有一个二维数组,我想打印到 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 做到这一点?
【问题讨论】:
【参考方案1】:CCLOG
或 cocos2d::log
使用 Visual Studio 的调试窗口,这与写入 std::cout
工作的控制台不同。
因此,有两种方法可以解决您的问题:使用std::cout
写入控制台或使用与CCLOG
不同的方法写入输出窗口
第一选择,您必须将项目类型从 Win32 应用程序项目更改为 Win32 控制台项目。这有点像 Visual Studio 的东西,在大多数情况下,您的项目是通过 cocos2d 的控制台自动创建的。你可以看到this post。我不推荐这种方式 IMO。
第二种选择,使用您自己的代码写入讨论here的输出。
还有另一种方法可以使用std::string
和std::ostringstream
将变量“打印”到缓冲区,然后通过CCLOG
将字符串打印到输出窗口
CCLOG
对代码进行了一点包装,以便于我们记录资源检查、错误、文件处理等通常在运行时发生的情况。如果不是在这些情况下,您可能应该设置断点来查看值是什么。
已编辑:由于您选择了第二种方法,我建议使用std::ostringstream
而不是sprintf
,并使用CCLog
而不是OutputDebugString
(因为您只需将其打印出来并且独立操作系统,不需要额外的参数)
这是一个示例代码:
#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
【讨论】:
嘿,我尝试使用sprintf
和string +
来实现你给出的第二个选择,但没有一个正确的,你能举一个更具体的例子,真的是c ++的新手,谢谢以上是关于如何在 cocos2dx 中打印二维数组的主要内容,如果未能解决你的问题,请参考以下文章
C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )