我想实施一个程序,告诉你当你输入年份时东方星期日在哪一天落下。但是,我不想使用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);
答案 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);
}