gpt4 book ai didi

c - 在 while 循环失败中测试 scanf != EOF

转载 作者:行者123 更新时间:2023-11-30 19:03:59 25 4
gpt4 key购买 nike

所以我开始了 C 类(class),虽然我有 C# 和 C++ 的经验,但我很早就陷入了关于 scanf = EOF 的困境

    printf("Students, please enter heights!\n");
double maleAvg = 0, femaleAvg = 0;
int currentHeight = 0, malecount = 0, femalecount = 0;
while(scanf("%d",&currentHeight) != EOF)
{
if(currentHeight > 0)
{
femaleAvg += currentHeight;
femalecount++;
}
else if (currentHeight < 0)
{
maleAvg += currentHeight;
malecount++;
}
else
{
printf("Error! Invalid height 0!\n");
return 0;
}
}
if(femalecount == 0)
{
printf("No girls in class! :(\n");
}
else
{
femaleAvg /= femalecount;
printf("Average girls height is: %f\n",femaleAvg);
}
if(malecount == 0)
{
printf("No boys in class! :(\n");
}
else
{
maleAvg /= malecount;
printf("Average boy height is: %f\n",maleAvg);
}
return 0;

据我了解,这是创建此循环的正确方法,因此它会读取直到文件末尾。然而,我发现虽然它确实根据写入的数字量进入循环,但它在 while 循环之后不执行任何操作,只是卡住了。我尝试在循环结束后立即打印一条消息,但没有打印任何内容。

最佳答案

您的问题来自于 stdin 永远不会关闭,并且在“正常”输入下永远不会返回 EOF。您可以通过键入 Ctrl+D(在 Linux 上)和 Ctrl+Z(在 Windows/DOS):

int main(int argc, char** argv)
{
int i;
int s = 0;
printf("Enter integer, Ctrl+D to compute the sum:\n");
while (scanf("%d", &i) != EOF) {
s += i;
}
printf("Sum = %d\n", s);
}

编译并运行:

Enter integer, Ctrl+D to compute the sum:
1
5
4
3
Sum = 13

但是你应该真正检查返回值并进行相应的处理,因为如果你输入例如,它会失败。 1.2(一般来说:始终检查返回值)。

请注意,正如 @Toby Speight 所指出的,您还可以使用您最喜欢的 shell 从文件进行重定向,该 shell 将发送 EOF:

./a.out < numbers.txt

numbers.txt 如下:

1
5
4
3

关于c - 在 while 循环失败中测试 scanf != EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53168581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com