2017-04-18 75 views
-1

我想實現一個程序,告訴您在哪一天東部星期日在您輸入年份時會出現。但是我不想用傳統的scanf方法,而是從extern文本文件中讀取年份數字!如何從一個文件中的不同行讀取多個數字

所以文本文件包含此:

1900 
1950 
2000 

我想是爲了節省每個數字在每一行中我的「廉政年」變量一次並通過數學公式推來運行,我會饒你從現在開始。 因此,例如它讀1900,所以它通過我的程序運行,之後,它開始在第二行,並讀取1950年,所以它運行通過和最後在2000年第三行。

我已經嘗試過這樣的東西,但它不在所有的工作:

FILE *fp; 
fp = fopen("bla.txt", "r"); 
while (!feof(fp)) 
{ 
fgets(year, 4, fp); 
} 

的代碼的其餘部分BTW看起來是這樣的(對於那些誰希望看到數學..)

int main() 
{ 
    int year; 
    int a; 
    int b; 
    int c; 
    int d; 
    int e; 
    int easter_sunday ; 


    a = year % 19 ; 
    b = year % 4 ; 
    c = year % 7 ; 
    d = (19 * a + 24) %30 ; 
    e = (2 * b + 4 * c + 6 * d + 5) % 7 ; 
    easter_sunday = (22 + d + e) ; 

    if (easter_sunday > 31) 
    { 

     printf("Easter Sunday in %d", year); 
     printf(" is April %d\n", easter_sunday - 31); 

    } 
    else 
    { 

     printf (" Easter Sunday in %d", year); 
     printf (" is March %d\n", easter_sunday); 

    } 

    fclose(fp); 
+0

像這樣的東西會工作:'while(fscanf(fp,「%d」,&year)== 1)' –

回答

0

fgets函數第一個參數必須是「字符串」,而你提供「整數」。 我在你的代碼中做了一些改變,它可以正常工作。檢查它並告訴我它是否不符合您的要求。

int main() 
{ 
int year; 
int a; 
int b; 
int c; 
int d; 
int e; 
int easter_sunday ; 
FILE *fp; 

fp = fopen("bla.txt", "r"); 
while (fscanf(fp, "%d", &year) != EOF) { 
a = year % 19 ; 
b = year % 4 ; 
c = year % 7 ; 
d = (19 * a + 24) %30 ; 
e = (2 * b + 4 * c + 6 * d + 5) % 7 ; 
easter_sunday = (22 + d + e) ; 

if (easter_sunday > 31) 
{ 

    printf("Easter Sunday in %d", year); 
    printf(" is April %d\n", easter_sunday - 31); 

} 
else 
{ 

    printf (" Easter Sunday in %d", year); 
    printf (" is March %d\n", easter_sunday); 

} 
} 
fclose(fp); 
} 
相關問題