这是代码(位于函数内),用于打开文件,然后使用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
,yTemp
和zTemp
分配给正确的值。
答案 0 :(得分:1)
您的格式字符串指定了3个float
值,但您将指针传递给int
。您应该看到有关使用不同类型的编译器警告。
如果您想阅读float
,请使用float
变量来接收数据。
答案 1 :(得分:1)
使用float变量而不是int
s。在fscanf
中您使用的是%f
,但变量是用于调用未定义行为的整数。
答案 2 :(得分:1)
您将变量声明为int
,
int xTemp = 0, xTot = 0;
int yTemp = 0, yTot = 0;
int zTemp = 0, zTot = 0;
但是将它们扫描为float
s,因此这些值是float
被解释为int
的位表示(虽然它是未定义的行为,所以其他任何事情都可能发生)
此外,你的循环控制是错误的,
while(!feof(file)) {
if(fscanf(file, "%f %f %f", &xTemp, &yTemp, &zTemp) != 3) {
return -1;
}
将始终返回-1
。 {<1}}只有在尝试从文件末尾读取数据后才会变为,因此循环将在读取完最后一行后再次运行,然后{{1将不再读取三个值。
更好的循环控制将是
feof(file)