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