从具有系统调用读取的文件中读取double

时间:2018-04-05 00:01:55

标签: c

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直到行尾,一切都很好。

1 个答案:

答案 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;
 }