0

这是打开文件然后读取其内容的代码(位于函数内部)fscanf()

FILE *file = NULL;
int xTemp = 0, xTot = 0;
int yTemp = 0, yTot = 0;
int zTemp = 0, zTot = 0;
int i = 0;

file = fopen(nomeFile, "r");

if(file == NULL) {

    return 0;

} else {

    while(!feof(file)) {

        if(fscanf(file, "%f %f %f", &xTemp, &yTemp, &zTemp) != 3) {

            return -1;

        } else {

            i++;
            xTot += xTemp;
            yTot += yTemp;
            zTot += zTemp;

        }

    }

    coords.x = xTot/i;
    coords.y = yTot/i;
    coords.z = zTot/i;

    return i;

}

这是我正在阅读的文件的内容fscanf()

3.5 2.1 -1.4
4.1 -4.1 2.9
2.6 2.5 3.2
-1.2 0.0 4.3
1.5 1.3 6.0

问题是它fscanf()不会分配给xTemp,yTempzTemp正确的值。

4

3 回答 3

1

您的格式字符串指定了 3 个float值,但您将指针传递给int. 您应该会看到有关使用不同类型的编译器警告。

如果要读取float,则使用float变量来接收数据。

于 2012-10-13T20:24:50.660 回答
1

使用浮点变量而不是ints。在fscanf您使用%f但变量是调用未定义行为的整数。

于 2012-10-13T20:25:26.797 回答
1

您将变量声明为int,

int xTemp = 0, xTot = 0;
int yTemp = 0, yTot = 0;
int zTemp = 0, zTot = 0;

但是将它们扫描为floats,因此这些值是floats 解释为的位表示int(尽管它是未定义的行为,因此也可能发生其他任何事情)。

此外,您的循环控制是错误的,

while(!feof(file)) {

    if(fscanf(file, "%f %f %f", &xTemp, &yTemp, &zTemp) != 3) {

        return -1;

    }

总会回来-1的。只有在您尝试从文件末尾读取数据后feof(file)才会变为真,因此循环将在读取最后一行后再次运行,然后不再读取三个值。fscanf

更好的循环控制将是

while(fscanf(file, "%f %f %f", &xTemp, &yTemp, &zTemp) == 3)
于 2012-10-13T20:27:25.300 回答