gpt4 book ai didi

c - 如何使用 eof 获取用户输入的整数,直到他按下 Enter?

转载 作者:行者123 更新时间:2023-11-30 16:26:21 25 4
gpt4 key购买 nike

我们开始编写 C 代码,但我无法解决我的硬件问题,因为我不知道如何从用户那里获取输入(整数),直到他按下 Enter 键(例如 20 30 10 40),然后使用 eof 完成。这是不起作用的部分代码,

printf("Students, please enter heights!\n");
while((scanf("%d",&height))!=EOF)
{
if(height>0)
{
avg_girls=avg_girls+height;
counter_girls++;
}

else
{
avg_boys=avg_boys+height;
counter_boys++;
}
}

我陷入了无限循环非常感谢你。

最佳答案

虽然从一行中读取未知数量的整数的更好方法是将整行读入足够大小的缓冲区中,然后使用 strtol (利用其 endptr 参数将缓冲区中的位置更新为最后一个转换值之后的 1 个字符),您可以使用 scanf 并完成相同的操作。

使用 scanf 从一行输入读取多个整数的一种方法是简单地读取每个字符并确认它不是 '\n' 字符或 EOF。如果该字符不是数字(或数字前面的 '-' 符号 - thanks Ajay Brahmakshatriya ),则直接获取下一个字符。如果字符是数字,则使用 ungetc 将其放回到 stdin 中,然后调用 scanf验证转换然后根据输入的符号更新女孩或男孩的平均值。

您可以执行以下操作:

    int height;

fputs ("enter heights: ", stdout);

while ((height = getchar()) != '\n' && height != EOF) {
/* if not '-' and not digit, go read next char */
if (height != '-' && !isdigit (height))
continue;
ungetc (height, stdin); /* was digit, put it back in stdin */
if (scanf ("%d", &height) == 1) { /* now read with scanf */
if (height > 0) { /* postive val, add to girls */
avg_girls += height;
counter_girls++;
}
else { /* negative val, add to boys */
avg_boys += height;
counter_boys++;
}
}
}

isspace() 宏由 ctype.h header 提供。如果您无法包含其他 header ,则只需手动检查 height 是否为数字,例如

    if (height != '-' && (height < '0' || '9' < height))
continue;

(请记住,您正在使用 getchar() 读取字符,因此请与 '0' 的 ASCII 字符进行比较>'9')

另一种替代方法是将整行输入读入缓冲区,然后在处理缓冲区时重复调用 sscanf 转换整数,另外还利用 "%n"说明符报告调用 sscanf 所消耗的字符数。 (例如,使用 "%d%n" 并提供一个指向 int 的指针来保存 "%n" 提供的值)然后您可以保留从缓冲区开头开始的总偏移量,以将其添加到指向 sscanf 位置的指针以进行下一次读取。

无论哪种方式都可以,但是对于新 C 程序员来说,一次读取一行比尝试使用 scanfstdin 更容易遇到陷阱。 > 本身。

关于c - 如何使用 eof 获取用户输入的整数,直到他按下 Enter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53101771/

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