我正在尝试用字符读取数字字符,但我不知道标准输入缓冲区是否为空。
我的第一个解决方案是寻找\n
标准输入缓冲区中的字符,但是如果我要输入由分隔符分隔的多个数字,这就没用了" "
.
我如何知道标准输入缓冲区中是否有字符?
我需要用 C 语言来完成它并且是可移植的。
有几种解决方案:
poll http://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html or select http://pubs.opengroup.org/onlinepubs/9699919799/functions/select.html超时为 0 - 这些将立即返回,结果为 -1 并带有 errnoEAGAIN
如果没有可用数据或带有数据的描述符数量(一,因为您只检查标准输入)。
ioctl http://pubs.opengroup.org/onlinepubs/9699919799/functions/ioctl.html是使用描述符的瑞士军刀。您需要的请求是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
...只要您正确处理重读、比缓冲区长的字符串以及其他现实生活中的复杂情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)