如何在 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】:

CCLOGcocos2d::log 使用 Visual Studio 的调试窗口,这与写入 std::cout 工作的控制台不同。

因此,有两种方法可以解决您的问题:使用std::cout 写入控制台或使用与CCLOG 不同的方法写入输出窗口

第一选择,您必须将项目类型从 Win32 应用程序项目更改为 Win32 控制台项目。这有点像 Visual Studio 的东西,在大多数情况下,您的项目是通过 cocos2d 的控制台自动创建的。你可以看到this post。我不推荐这种方式 IMO。

第二种选择,使用您自己的代码写入讨论here的输出。

还有另一种方法可以使用std::stringstd::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::ostringstreamhere

【讨论】:

嘿,我尝试使用sprintfstring +来实现你给出的第二个选择,但没有一个正确的,你能举一个更具体的例子,真的是c ++的新手,谢谢

以上是关于如何在 cocos2dx 中打印二维数组的主要内容,如果未能解决你的问题,请参考以下文章

无法在函数 C++ 中打印二维数组

如何从 Angular 5 中的二维数组打印表格?

如何从文本文件创建二维数组并在 c 中打印到新文件

C 语言数组 ( 验证二维数组内存是线性的 | 打印二维数组 | 以一维数组方式打印二维数组 | 打印二维数组值和地址 )

如何将二维字符串数组打印为字符串

我将如何使用二维数组来打印季度和总计