我有以下格式的测量数据:40.0095;34.0;;0.065058;;392;300;;;;;;;;;;; 40.0242;;14.8;;;;;;392;300;400;300;20.0;0.0;0.0;-0.0;0.3;-0.3;1444;1494;392.9;18.6;299.7;-4.4
等等。
我尝试使用fscanf阅读文件,但它不读取值。而是记录0.0。
下面是我的代码:
# include <stdio.h>
# include <string.h>
double t_abs[700] ;
double t_nxtSIO[700] ;
int main( )
{
FILE *filePointer ;
filePointer = fopen("BallPlateLogData.txt", "r") ;
if ( filePointer == NULL )
{
printf( "file failed to open." ) ;
}
else
{
int read = 0 ;
int line = 0 ;
printf("The file is now opened.\n") ;
do{
if (line != 0)
{
read = fscanf(filePointer,
"%lf[^;], %lf[^;]\n",
t_abs[line],
t_nxtSIO[line]) ;
}
line++ ;
if (ferror(filePointer))
{
printf("Error reading file\n");
return 1 ;
}
fclose(filePointer) ;
printf("%0.1f\n", t_abs[line]) ;
} while (!feof(filePointer)) ;
}
return 0;
}
上面的不起作用。
帮助是非常感谢!
1条答案
按热度按时间aurhwmvo1#
scanf
可以很好地阅读格式化的输入。如果你的输入可能包含空字段,那么它就不是真正的格式化,scanf
是错误的工具。也许可以让scanf
工作,但它会比它的价值更难。相反,你可以用fgets
读取每一行,并用strtod
解析数据。例如:这段代码的目的是希望你将
'\n'
作为expect
参数传递给输入的最后一个字段,但是这不会像现在这样工作,因为isspace
会超过换行符。这和你在scanf
中遇到的问题是完全一样的,所以在显式的情况下弄清楚如何处理它可能是一个很好的练习。另外要注意的是,数组是从零开始的,你从第二行输入的数据写入数组的索引1,而没有将任何数据放入数组的第一个位置(索引0),这看起来很奇怪。