Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从C+中的文本文件中读取坐标+;_C++_Text Files_Coordinates_File Io - Fatal编程技术网

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