double a[5];
for(int i = 0; i < 5; ++i){
read(fd, &a[i], sizeof(double));
}
当我打印数组的内容时,它只显示零。如何在不使用fscanf
的情况下从文本文件中读取双数字?
FILE.TXT
2.00 5.11 6.90 3.4 8.7
如果我通过char读取char直到行尾,一切都很好。
答案 0 :(得分:0)
正如其他人所建议的那样,如果您不想使用fscanf()
,那么您可能应该使用read()
从文件读取所有数据并存储到 char缓冲区并解析为whitespace
然后使用strtod()
将结果字符串转换为double
。
这是帮助解决方案没有完成一个
int main() {
int fd = open("input.txt",O_RDWR | 0664);
if(fd == -1) {
perror("open");
return 0;
}
/* first find the size of file */
int size = lseek(fd,0,2);
printf("size of file : %d \n",size);
lseek(fd,0,0);/* again start reading from beginning */
/* take buffer equal to size of file */
char *buf = malloc(size * sizeof(char) + 1);
/* read all at a time using read()*/
read(fd,buf,size);
buf[size] = '\0';
printf("%s\n",buf);
/* now parse using strtod() */
double res;
char new_buf[64]; /* to store each double number read from fil
e */
for(int iter = 0,inner_iter = 0;buf[iter] != '\0' ;iter++ ) {
if(buf[inner_iter]!=' ' ) {
new_buf[inner_iter++] = buf[iter];
continue;
}
else {
new_buf[inner_iter] = '\0';
res = strtod(new_buf,NULL);
printf("%lf\n",res);
inner_iter = 0; /* make this variable 0 again */
}
}
free(buf);
close(fd);
return 0;
}