fscanf没有读取文件中的double。文件很好

时间:2014-10-14 21:44:40

标签: c scanf

知道为什么我用这个printf得到0.000000?我检查了文件并且创建得很好

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    double doub1;
    FILE *p;
    if((p=fopen("data.txt","wb+"))==NULL)
        puts("no");
    fprintf(p,"%lf@%lf\n%lf%s",3.9458,314.32133,32.3,"hello");
    fscanf(p,"%lf",&doub1);
    printf("%lf",doub1);
}

1 个答案:

答案 0 :(得分:2)

要写入使用+打开的流并从同一个流中读取,您需要先刷新输出:

fflush(p);

但是,这不会重新定位文件位置指示器。要阅读您已经写过的字符,您需要回头查看它们。没有单独的文件位置指示器用于读写:

fseek(p, 0, SEEK_SET);    // go to start of file

fseek执行隐式同花,因此如果您正在执行fflush,则不需要fseek

此外,在尝试打印输出之前,应检查fscanf的返回值。如果扫描失败,则表示您正在打印未初始化的变量。