使用fgetc(STDIN)后如何在PHP中刷新stdin?

时间:2011-11-17 09:20:48

标签: php

如果用户在调用fgetc(STDIN)时键入多个字符,则对fgetc(STDIN)的另一次调用将不会要求新字符,并将使用缓冲区中的下一个字符。我解决这个问题的一种方法是创建以下函数:

<?php
    function get_char_from_stdin() {
        if (($char = fgetc(STDIN)) != "\n")
            fgets(STDIN);
        return $char;
    }
?>

是否有比上述更优雅的解决方案?

P.S。如果我的术语关闭,请原谅我。请更正任何滥用的条款。感谢。

编辑:这适用于Windows吗?我现在正在使用Mac。

1 个答案:

答案 0 :(得分:0)

STDIN是缓冲的,所以为了在调用函数后输入第一个字符,你必须打开一个带有空缓冲区的新流。

function get_char_from_stdin() {
    $stdin = fopen('php://stdin', 'r');
    return fgetc($stdin);
}