我编写了这段代码,似乎函数fseek()存在问题。因为它会影响文本文件的读取。它使函数fscanf()读取文件中的垃圾和错误的数据。我的文件只包含浮点数。
FILE *fptr;
if ( !( fptr = fopen( "saving.txt", "r" ))){
printf( "File could not be opened to retrieve your data from it.\n" );
}
else {
fseek(fptr, 0, SEEK_END);
unsigned long len = (unsigned long)ftell(fptr);
if (len > 0) { //check if the file is not empty.
while ( !feof( fptr ) ){
fscanf( fptr,"%f\n", &p.burst_time );
//printf("time = %f\n",p.burst_time);
AddProcess(&l,p.burst_time);
}
}
fclose( fptr );
}
提示:这段代码知道文件是否为空。如果没有从中读取。我也使用函数rewind(fptr);在循环之前,但没有区别。谢谢。
答案 0 :(得分:0)
仅查看代码的摘录:
fseek(fptr, 0, SEEK_END);
unsigned long len = (unsigned long)ftell(fptr);
if (len > 0) { //check if the file is not empty.
while ( !feof( fptr ) ){
fscanf( fptr,"%f\n", &p.burst_time );
出于某种原因,在进行任何读取之前,您正在寻找文件的末尾。我假设你这样做是为了弄清楚文件的大小。
你得到疯狂输出的原因是你实际上没有读过任何内容,所以feof
在第一次通过之前无法返回文件结尾。
我建议您在fseek(fptr, 0, SEEK_SET);
声明之前添加while
来解决此问题。