在C语言中从文件中读取并打印双倍比率

3
我有一个文件,其中有一系列数字:9 1 2 1。
我试图找出子数之和与总和的比率。
#include <stdio.h>
void main()
{ 
    double subSum = 0;
    double sum    = 13;
    double num    = 0;
    double x      = 0;
    FILE*  file   = fopen("text.txt", "r");

    while (fscanf(file, "%f", &num) > 0)
    {
        subSum = subSum + num;
        x      = subSum / sum;

        printf("%f",x);
        printf("\n");
    }

    fclose(file);
}

但它一直打印零(0.00000000000),为什么?

1
打开文件后进行错误检查。 - sujin
3
请问您是否尝试过使用调试器或老旧但实用的 printf 函数来定位问题所在?实际上,这个程序非常简单,您确定已经尝试了一切吗? - meaning-matters
3个回答

6
你正在将一个 double 变量的地址传递给一个已告知希望得到一个 float 地址的 scanf() 格式。
while (fscanf(file, "%f", &num) > 0)

should be:

while (fscanf(file, "%lf", &num) > 0)

0
#include<stdio.h>
void main()
{ 
double subSum=0;
double sum=13;
int num=0;
double x=0;
FILE *file = fopen("text.txt", "r");
while(fscanf(file, "%d", &num) > 0){
    subSum=subSum+(double)num;
    x= subSum / sum;
    printf("%f",x);
    printf("\n");
 }
fclose(file);
}

使用%ddouble一样糟糕,就像使用%fdouble一样。使用%d读取十进制整数。使用%lf读取double。即使问题要求,也不要使用void main()。根据C标准或Microsoft网站,这是不合法的。 - Jonathan Leffler

0
如果你的C编译器不支持“%lf”,那么:
 float  num;
 double dnum;

 // etc.

 scanf("%f", &num);

 //etc.

 dnum = (double) num;  // use dnum in calculations

我从未遇到过支持float但不支持double(或反之亦然)的C编译器。很久以前,有些系统没有浮点数单元,有时库省略了所有对浮点数的支持 - 或者如果您请求了它,则使用软件浮点数。但那是很久以前的事了,在80386(没有配套的80387 FPU)和80486 SX芯片的时代。 - Jonathan Leffler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接