我有一个名为10.text的文本文件,其中包含10个大数字。我想读取这些数字并将它们存储在大小为10的数组中。然后我想打印出这些nmbers以及读取文件所需的时间。
这是我的尝试:
int main(int argc, const char * argv[]) {
int i;
clock_t start, end;
double cpu_time_used;
double TimeOfReadingFile;
FILE *myFile;
int readarr10[10];
start = clock();
myFile=fopen("10.txt" ,"r");
printf("SIZE 10\n");
printf("----------------\n");
for (i = 0; i < 10; i++)
fscanf(myFile, "%d", &readarr10[i]);
end = clock();
for (i=0; i<10; i++) {
printf("%d ",readarr10[i]);
printf("\n");
}
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
TimeOfReadingFile=cpu_time_used*pow(10, 9);
printf("time for reading the 10 file: %f\n",TimeOfReadingFile);
return 0;}
问题在于,当我运行它时,我得到所有thr数字的零和当时的零。 这段代码是我正在进行的项目的一部分,如果我做对了,我就无法继续!
答案 0 :(得分:0)
读取10个数字可能低于clock
的定义。在我的虚拟机上的BSD系统上,我不得不循环超过1000次以开始查看某些内容。循环1000000次(读取10个整数,重绕文件)我得到(操作或多或少2.5微秒。如果我在循环中包含fopen / fclose,我以24微秒结束。
我认为(但我必须承认我不确定),小FILE *上的倒带只会重置文件指针,但不会再次读取磁盘上的任何扇区。另一方面,读取10个整数(单个磁盘操作)应该在打开和关闭文件后缩短。
所以我的结论是(在我的系统上):
我有一个不太快的磁盘和运行VirtualBox机器的开销,所以在高速计算机上,时间甚至可能更小。因此,在一次迭代中end == start
就不足为奇了。