gpt4 book ai didi

检查标准输入缓冲区是否为空

转载 作者:太空狗 更新时间:2023-10-29 15:03:56 25 4
gpt4 key购买 nike

我想用字符读取一个数字字符,但我不知道标准输入缓冲区是否为空。

我的第一个解决方案是在 stdin 缓冲区中寻找 \n 字符,但是如果我输入多个由 "" 分隔的数字,这就不好了。

我怎么知道我在标准输入缓冲区中是否有字符?

我需要用 C 来做并且是可移植的。

最佳答案

有几种解决方案:

pollselect超时为 0 - 如果没有可用数据,这些将立即返回并且结果为 -1 和 errno EAGAIN 或者有数据的描述符数量(一个,因为你只检查标准输入)。

ioctl是使用描述符的瑞士军刀。您需要的请求是I_NREAD:

if (ioctl(0, I_NREAD, &n) == 0 && n > 0)
// we have exactly n bytes to read

然而,正确的解决方案是将您获得的所有内容(使用 scanf)读取为一行,然后处理结果 - 这对于 sscanf 来说已经足够好了:

char buf[80]; // large enough
scanf("%79s", buf); // read everything we have in stdin
if (sscanf(buf, "%d", &number) == 1)
// we have a number

...只要您正确处理重读、比缓冲区长的字符串以及其他现实生活中的复杂问题。

关于检查标准输入缓冲区是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26948723/

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