c++ - 从 C++ 文本文件中读取坐标

标签 c++ text-files coordinates file-io

好的,所以我要做的只是从文本文件中读取一些坐标,然后使用它们绘制一组砖 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/

相关文章:

c++ - 在 C++ 中传递多个函数参数的最佳实践

python - 从文本文件中打印两个特定行(关键字)之间的多行

java - 从文本文件读取数据并将其添加到android中的arraylist的最佳方法

ruby - 我如何使用 (Ruby) RGeo 转换 (Unproject) 坐标

c++ - 是否有使用谓词比较两个范围的标准方法?

C++:高层类层次结构

c++ - 对方阵进行排序

python - 读取非常大的一行文本文件

objective-c - 以编程方式滚动 UIScrollView

javascript - 获取Leaflet上坐标的方法