C 在下面的代码中如何使用EOF结束输入?
我目前正在从事一个计算机科学项目,我在努力完成最后的步骤时被卡住了。到目前为止,它非常混乱,但代码基本上采用给定的前两个值作为x和y坐标,并使用它们生成总距离。然后,它还使用第三个点来计算总的上坡和下坡坡度。我已经让这些部分正常工作,但是分配声明:您应该使用scanf读取数据,直到出现EOF,这可以通过检查scanf的返回值来检测。 我想知道我将如何实现这一目标?目前,我的do while循环的约束条件是,一旦it=EOF,它将终止,但是这会导致代码在任何-1出现时终止。 代码如下:C 在下面的代码中如何使用EOF结束输入?,c,scanf,eof,C,Scanf,Eof,我目前正在从事一个计算机科学项目,我在努力完成最后的步骤时被卡住了。到目前为止,它非常混乱,但代码基本上采用给定的前两个值作为x和y坐标,并使用它们生成总距离。然后,它还使用第三个点来计算总的上坡和下坡坡度。我已经让这些部分正常工作,但是分配声明:您应该使用scanf读取数据,直到出现EOF,这可以通过检查scanf的返回值来检测。 我想知道我将如何实现这一目标?目前,我的do while循环的约束条件是,一旦it=EOF,它将终止,但是这会导致代码在任何-1出现时终止。 代码如下: #i
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(void)
{
double a;
double total;
double up;
double b;
double c;
double d;
double down;
double zc;
double yes;
double m;
double n;
double m2;
double n2;
double o;
double p;
double q;
double xc;
double yc;
int i = 1;
xc = 1000;
yc = 1000;
total = 0;
down = 0;
scanf("%lf", &c);
do
{
if (i == 1) {
a = c;
scanf ("%lf", &c);
i += 1;
}
else if (i == 2) {
b = c;
scanf ("%lf", &c);
i += 1;
}
else if (i ==3) {
d = c;
if (xc == 1000 && yc == 1000) {
i = 4;
}
else if (xc != 1000) {
i = 5;
}
}
else if (i == 4) {
if (d > zc) {
yes = d - zc;
up = yes/p;
if (up > total) {
total = up;
}
}
if (d < zc) {
yes = d - zc;
up = yes/p;
if (up < 0) {
up = up *-1;
}
if (up > down) {
down = up;
}
}
xc = b;
yc = a;
zc = d;
scanf ("%lf", &c);
i = 1;
}
else if (i == 5) {
m = (xc - b);
n = (yc - a);
m2 = m*m;
n2 = n*n;
o = m2 + n2;
p = sqrt(o);
q = q + p;
i = 4;
}
}
while (c != EOF && i <= 5);
printf ("Total distance: %.1lf\n", q);
printf ("Maximum uphill gradient: %.3lf\n", total);
printf ("Maximum downhill gradient: %.3lf\n", down);
return EXIT_SUCCESS;
}
应返回:
Total distance: 9.0
Maximum uphill gradient: 1.000
Maximum downhill gradient: 1.500
您可以像这样存储scanf的返回值
check=scanf(“%lf”,&c)代码>
和while(check!=EOF&&i您可以检查函数scanf()
的返回值。例如:
scanf(“%d%d”,&a和&b);
如果成功读取a
和b
,它将返回2
如果仅成功读取a
,它将返回1
如果读取“a”失败,现在b是不相关的,例如:a不是int
,它将返回0
如果在scanf()
时获取文件的结尾,它将返回EOF
我希望这能对您有所帮助。检查scanf
的返回值。如果它是0
,则中断。EOF
不是扫描的值,而是一个可能的返回值scanf
:当输入流用完时,它返回成功转换的参数数或EOF
。查看“相关”学习如何使用scanf
控制循环的右侧答案。您是否使用ctrl-z进行EOF?是否尝试了ctrl-D?您可以在MOehm检查此链接。一般来说,EOF
不应根据scanf
的返回值进行测试,因为如果由于不同错误导致读取失败,测试将失败。双值必须包含n a.”否则它们必须转换。在将双变量设置为某个文本时,建议该文本包含a.”次要说明:如果读取“a”和“b”失败,它将返回0。“b
success/failure与此无关。最后一点更像“如果读取错误或获取文件结尾并且扫描a
未成功,它将返回EOF。”@chux,可能我没有说清楚。我会更正它。谢谢。
Total distance: 9.0
Maximum uphill gradient: 1.000
Maximum downhill gradient: 1.500