好的,所以我要做的只是从文本文件中读取一些坐标,然后使用它们绘制一组砖 block 。我有这段代码:
ifstream infileScenario("scenario1.txt");
for (int i = 0; i < NUM_OF_BRICKS; i++)
{
// read brick coordinates
infileScenario >> bricks[i].m_x;
infileScenario >> bricks[i].m_y;
cout << bricks[i].m_x << " " << bricks[i].m_y << endl;
// set brick properties
bricks[i].m_height = 0.1;
bricks[i].m_width = 0.2;
bricks[i].life = 3;
}
infileScenario.close();
但是我唯一打印到控制台的是一堆 0。我一遍又一遍地检查了我的代码,并仔细检查了我的文本文件,但我仍然看不出哪里出错了。
我的文本文件名为 scenario1.txt,它的内容是:
-0.6 0.7
-0.3 0.7
0 0.7
0.3 0.7
0.3 0.7
-0.6 0.5
-0.3 0.5
0 0.5
0.3 0.5
0.3 0.5
我自己写下了这些值,如果我不得不冒险猜测,我会认为是什么导致了我的问题。这可能与文本编码有关,还是我的想法有误?
最佳答案
我建议不要使用流类,它们更难检查错误,这里是使用 fscanf 转换(带有错误检查)的相同代码。
FILE *infileScenario;
int i;
if ((infileScenario = fopen("scenario1.txt", "r")) == NULL) //didnt open readonly
{
printf("Error, could not open scenario1.txt\n");
exit(-1); //terminate program with a code we can read by running echo $?
}
for (i = 0; i < NUM_OF_BRICKS &&
fscanf(infileScenario, "%lf %lf",
&bricks[i].m_x, &bricks[i].m_y) != EOF;
i++)
{
// read brick coordinates
printf("%lf %lf\n", bricks[i].m_x, bricks[i].m_y);
// set brick properties
bricks[i].m_height = 0.1;
bricks[i].m_width = 0.2;
bricks[i].life = 3;
}
fclose(infileScenario);
您也可以 g++ -g -o 然后 gdb 并在 gdb 中运行以下命令:
b main
r
s
(each time the for loop hits bricks[u].life = 3, run)
p bricks[i]
(otherwise, keep running)
s
如果我的解决方案不能解决问题,那应该可以让您诊断出问题是什么。
关于c++ - 从 C++ 文本文件中读取坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398577/