二进制读取文件使用命令行参数

我尝试写c primer plus 练习题13.10-4:编写一个程序,不接受任何命令行参数或接受一个命令行参数。如果有一个,将其解释为文件名;如果没有参数,使用标准输入(stdin)作为输入。假设输入为浮点数。该程序要计算和报告输入数字的算数平均值。
标准输入我写好了,但是用命令行时平均值为nan。

img


win10,最新版visual studio
代码如下

#include 
#include 
#include 
int main(int argc, char *argv[])
{
    double ch;
    double numbers[12];
    FILE* fp;
    double average=0;
    int i = 0;
    if (argc==1)
    {
        printf("enter double end with q\n");
        while (scanf_s("%lf", &ch))
        {
            average += ch;
            printf("%lf\n", ch);
            i++;
        }
    }
    else
    {
        for (int j = 0; j < 12; j++)
            numbers[j] = 10.1 * j;
        fopen_s(&fp, argv[1], "wb");
        fwrite(numbers, sizeof(double), 10, fp);
        fclose(fp);
        if ((fopen_s(&fp, argv[1], "rb")!=0))
        {
            fprintf(stdout,"cant find %s\n", argv[1]);
            exit(EXIT_FAILURE);
        }           
        while (fseek(fp, (long)i * sizeof(double), SEEK_SET)!=0)
        {
            fread(&ch, sizeof(double), 1, fp);
            fprintf(stdout, "ch\n");
            average += ch;
            i++;
        }
        fclose(fp);
    }
    printf("average is %lf\n", average/i);
    return 0;
}

你这个else部分的i值并没有赋值啊。还是初始值0,那你这个while (fseek(fp, (long)i * sizeof(double), SEEK_SET)!=0) 根本就不读取数据啊。while读取一次由于读取到的是0字节,直接就结束循环了。最后i为0,且你作为除数,出现除数为0异常,输出就是nan啦