如何从文件中的不同行读取多个数字

时间:2017-04-18 13:42:14

标签: c calendar readfile

我想实施一个程序,告诉你当你输入年份时东方星期日在哪一天落下。但是,我不想使用scanf的传统方法,而是从外部文本文件中读取年份数字!

因此文本文件包含:

1900
1950
2000

我想要的是保存我的“年”中的每一行中的每个数字'变量一次将通过一个数学公式运行,我现在将免除你。 所以例如它读取1900所以它通过我的程序运行,然后它从第二行开始读取1950,所以它运行通过,最后在第三行2000。

我已经尝试过类似的东西,但它根本不起作用:

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

其余的代码顺便说一下(对于那些想看数学的人来说......)

   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);

1 个答案:

答案 0 :(得分:0)

fgets函数中,当您提供“整数”时,第一个参数必须是“string”。 我对您的代码进行了一些更改,它运行正常。检查并告诉我它是否符合您的要求。

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