在此代码中,我想使用 ftell() 获取 txt 文件中的元素数量。 该文件有 24 个双精度值。此代码中的问题是它返回 27 作为元素数。为什么我的值不断增加 2?
#include <stdio.h>
#include<stdlib.h>
void func(const char *srcFilePath)
{
FILE *pFile = fopen(srcFilePath, "r");
if (!pFile) {
perror(srcFilePath);
return;
}
size_t nbEle;
fseek(pFile, 0, SEEK_END);
size_t inSize = ftell(pFile);
nbEle = inSize/8; // double
printf("number of elements in file =%d \n",nbEle);
fclose(pFile);
double *daBuf = (double *)malloc(inSize);
FILE *ppFile = fopen(srcFilePath, "r");
if (ppFile == NULL)
{
printf("Failed to open input file. 2\n");
}
size_t n = 0;
while(n < nbEle && 1 == fscanf(pFile, "%lf,", &daBuf[n])){
n++;
}
printf("******* N =%d \n", n);
if (ferror(pFile))
perror(srcFilePath);
fclose(pFile);
int main(void)
{
const char inputfile[] = "/home/debian/progdir/input";
func(inputfile);
}
如果有 24 个双精度数,则它们至少由一个空格字符分隔。所以有 24 个空白字符。 24 / 8 给出 3.
一般来说,您获取文件中存储的双精度数的方法是错误的。