我有一个二维数组,我想打印到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 应用程序项目更改为 Win32 控制台项目。这有点像 Visual Studio 的东西,在大多数情况下,你的项目是通过 cocos2d 的控制台自动创建的。你可以看到这个帖子。我不推荐这种方式 IMO。
第二种选择,使用您自己的代码写入此处讨论的输出。
还有另一种方法可以使用std::string
并将std::ostringstream
变量“打印”到缓冲区,然后只需通过以下方式将字符串打印到输出窗口CCLOG
CCLOG
稍微包装代码以方便我们记录资源检查、错误、文件处理等,这些通常在运行时发生。如果不是在这些情况下,您可能应该设置断点来查看值是什么。
编辑:由于您选择了第二种方法,因此我建议使用std::ostringstream
thansprintf
和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
这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句