2013-08-27 84 views
3

打印雙比我有具有一系列數字文件:9 1 2 1從文件中讀取並且用C

我嘗試findout比率個子求和/總和

#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',看看哪裏出了問題。真的,這個節目很簡單,你真的嘗試過一切嗎? –

回答

6

您將double變量的地址傳遞給scanf()格式,該格式被告知預計地址爲float

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

應該是:

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); 
} 
+0

對'double'使用'%d'與對'double'使用'%f'一樣糟糕。使用'%d'來讀取一個十進制整數。使用'%lf'來讀取'double'。即使問題存在,也不要使用'void main()'。根據C標準或Microsoft網站,這是不合法的。 –

0

如果你的C編譯器支持 「%LF」,則:在fopen

float num; 
double dnum; 

// etc. 

scanf("%f", &num); 

//etc. 

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

我不認爲我遇到過支持'float'但不支持'double'的C編譯器(反之亦然)。很久以前,系統中沒有浮點單元,有時這些庫會省略所有對浮點的支持 - 或者如果您請求了浮點,則使用軟件浮點。但那是很久以前,在80386(沒有配套的80387 FPU)的時代,也許是80486 SX芯片。 –