【发布时间】:2017-04-09 11:57:55
【问题描述】:
我有一个包含浮点数的大文件,我想读取它们。
52.881 49.779 21.641 37.230 23.417 7.506 120.190 1.240 79.167 82.397 126.502 47.377 112.583 124.590 103.339 5.821 24.566 38.916 42.576
这只是文件的开始。它有 10000000 个数字。
我得到了这个代码,但我不知道如何打印数字。
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <fcntl.h>
#include <sysexits.h>
#include <unistd.h>
int main()
{
int fd;
size_t bytes_read, bytes_expected = 1000000*sizeof(double);
double *data;
char *infile = "file.dat";
if ((fd = open(infile,O_RDONLY)) < 0)
err(EX_NOINPUT, "%s", infile);
if ((data = malloc(bytes_expected)) == NULL)
err(EX_OSERR, "data malloc");
bytes_read = read(fd, data, bytes_expected);
if (bytes_read != bytes_expected)
err(EX_DATAERR, "Read only %d of %d bytes",
bytes_read, bytes_expected);
/* print all */
free(data);
exit(EX_OK);
}
【问题讨论】:
-
我不需要阅读你的代码来解决问题
100000000*sizeof(double),为什么会有这个值?为什么这么大?另外,bytes_read不一定等于bytes_expected,原因很多,请贴出部分文件内容。 -
如果你有一个
double的数组,你知道如何打印它吗?数组和指针非常相似,您可以使用相似的语法来访问它们的元素。 -
@zaig 从不使用魔法常数。除非它们像文件格式的标题那样真正具有魔力。
-
如果文件中的数据是text,你应该把它当作文本而不是二进制数据来读取。改用标准 C 函数(如
fopen、fscanf等) -
当您在阅读文件方面寻求帮助时,请显示该文件。