C++ 从C+中的文本文件中读取坐标+;
好的,我所要做的就是从一个文本文件中读取一些坐标,然后用它们来绘制一组砖块。我有以下代码:C++ 从C+中的文本文件中读取坐标+;,c++,text-files,coordinates,file-io,C++,Text Files,Coordinates,File Io,好的,我所要做的就是从一个文本文件中读取一些坐标,然后用它们来绘制一组砖块。我有以下代码: 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;
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();
我在自己身上写下了这些值,如果我不得不冒险猜测的话,我会想是什么导致了我的问题。这可能与文本编码有关,还是我的想法有误?我建议不要使用流类,它们更难检查错误,下面是使用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);
如果我的解决方案没有解决问题的话,这应该可以让你诊断出问题的症结所在。m_x和m_y成员的类型是什么?希望文本编码不会混乱到连普通ASCII都需要重新编码!你在读花车;什么类型的变量?如果它们存储在
int
中,或者如果您将它们作为int
打印到控制台,您将永远看不到浮点数。for循环显然忽略了在值提取中发生的几乎可以保证的故障。您没有检查文件是否已成功打开,更不用说使用success提取每个值了。m_x和m_y都是浮点数。我尝试了您的代码,尽管它没有解决我的问题,但它立即突出显示了问题所在:我没有将文本文件放在正确的目录中,因此无法加载它。真的有点尴尬。。。但至少我已经学会了使用ifstream的另一种选择。是的,fstreams有点糟糕……它们对于初学者来说很简单,但你似乎可以处理它
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);
b main
r
s
(each time the for loop hits bricks[u].life = 3, run)
p bricks[i]
(otherwise, keep running)
s